Mirror linked task behaviour from other implementations: default to terminating facet on task end, and also terminate facet on task exception
This commit is contained in:
parent
08e49fd14e
commit
3035b43941
3
chat.py
3
chat.py
|
@ -29,6 +29,8 @@ def main():
|
||||||
|
|
||||||
@syndicate.relay.connect(args.address, sturdy.SturdyRef.decode(syndicate.parse(args.cap)))
|
@syndicate.relay.connect(args.address, sturdy.SturdyRef.decode(syndicate.parse(args.cap)))
|
||||||
def on_connected(ds):
|
def on_connected(ds):
|
||||||
|
turn.on_stop(lambda: turn.stop(root_facet))
|
||||||
|
|
||||||
me = 'user_' + str(random.randint(10, 1000))
|
me = 'user_' + str(random.randint(10, 1000))
|
||||||
|
|
||||||
turn.publish(ds, Present(me))
|
turn.publish(ds, Present(me))
|
||||||
|
@ -48,4 +50,3 @@ def main():
|
||||||
await f.loop.connect_read_pipe(lambda: asyncio.StreamReaderProtocol(reader), sys.stdin)
|
await f.loop.connect_read_pipe(lambda: asyncio.StreamReaderProtocol(reader), sys.stdin)
|
||||||
while line := (await reader.readline()).decode('utf-8'):
|
while line := (await reader.readline()).decode('utf-8'):
|
||||||
turn.external(f, lambda: turn.send(ds, Says(me, line.strip())))
|
turn.external(f, lambda: turn.send(ds, Says(me, line.strip())))
|
||||||
turn.external(f, lambda: turn.stop(root_facet))
|
|
||||||
|
|
|
@ -251,15 +251,20 @@ class Facet:
|
||||||
task.cancel()
|
task.cancel()
|
||||||
task = None
|
task = None
|
||||||
async def guarded_task():
|
async def guarded_task():
|
||||||
|
should_terminate_facet = True
|
||||||
try:
|
try:
|
||||||
await coro_fn(self)
|
if await coro_fn(self) is True:
|
||||||
|
should_terminate_facet = False
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
pass
|
pass
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
finally:
|
finally:
|
||||||
Turn.external(self, cancel_linked_task)
|
if should_terminate_facet:
|
||||||
|
Turn.external(self, lambda: Turn.active.stop())
|
||||||
|
else:
|
||||||
|
Turn.external(self, cancel_linked_task)
|
||||||
task = self.loop.create_task(guarded_task())
|
task = self.loop.create_task(guarded_task())
|
||||||
self.linked_tasks.append(task)
|
self.linked_tasks.append(task)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue