forked from goodboy/tractor
Appease the great mypy
parent
42be410076
commit
b3eba00c3a
|
@ -168,8 +168,8 @@ class Actor:
|
|||
is_arbiter: bool = False
|
||||
|
||||
# nursery placeholders filled in by `_async_main()` after fork
|
||||
_root_n: trio.Nursery = None
|
||||
_service_n: trio.Nursery = None
|
||||
_root_n: Optional[trio.Nursery] = None
|
||||
_service_n: Optional[trio.Nursery] = None
|
||||
_server_n: Optional[trio.Nursery] = None
|
||||
|
||||
# Information about `__main__` from parent
|
||||
|
@ -497,6 +497,7 @@ class Actor:
|
|||
|
||||
# spin up a task for the requested function
|
||||
log.debug(f"Spawning task for {func}")
|
||||
assert self._service_n
|
||||
cs = await self._service_n.start(
|
||||
partial(_invoke, self, cid, chan, func, kwargs),
|
||||
name=funcname,
|
||||
|
@ -551,7 +552,7 @@ class Actor:
|
|||
async def _chan_to_parent(
|
||||
self,
|
||||
parent_addr: Optional[Tuple[str, int]],
|
||||
) -> Channel:
|
||||
) -> Tuple[Channel, Optional[Tuple[str, int]]]:
|
||||
try:
|
||||
# Connect back to the parent actor and conduct initial
|
||||
# handshake. From this point on if we error, we
|
||||
|
@ -564,6 +565,8 @@ class Actor:
|
|||
# Initial handshake: swap names.
|
||||
await self._do_handshake(chan)
|
||||
|
||||
accept_addr: Optional[Tuple[str, int]] = None
|
||||
|
||||
if self._spawn_method == "trio":
|
||||
# Receive runtime state from our parent
|
||||
parent_data = await chan.recv()
|
||||
|
@ -578,9 +581,6 @@ class Actor:
|
|||
for attr, value in parent_data.items():
|
||||
setattr(self, attr, value)
|
||||
|
||||
else: # mp
|
||||
accept_addr = None
|
||||
|
||||
return chan, accept_addr
|
||||
|
||||
except OSError: # failed to connect
|
||||
|
@ -636,6 +636,7 @@ class Actor:
|
|||
# a deterministic way.
|
||||
async with trio.open_nursery() as root_nursery:
|
||||
self._root_n = root_nursery
|
||||
assert self._root_n
|
||||
|
||||
async with trio.open_nursery() as service_nursery:
|
||||
# This nursery is used to handle all inbound
|
||||
|
@ -643,6 +644,7 @@ class Actor:
|
|||
# is killed, connections can continue to process
|
||||
# in the background until this nursery is cancelled.
|
||||
self._service_n = service_nursery
|
||||
assert self._service_n
|
||||
|
||||
# Startup up the channel server with,
|
||||
# - subactor: the bind address sent to us by our parent
|
||||
|
@ -650,6 +652,7 @@ class Actor:
|
|||
# - root actor: the ``accept_addr`` passed to this method
|
||||
assert accept_addr
|
||||
host, port = accept_addr
|
||||
|
||||
self._server_n = await service_nursery.start(
|
||||
partial(
|
||||
self._serve_forever,
|
||||
|
@ -765,7 +768,7 @@ class Actor:
|
|||
# (host, port) to bind for channel server
|
||||
accept_host: Tuple[str, int] = None,
|
||||
accept_port: int = 0,
|
||||
task_status: TaskStatus[None] = trio.TASK_STATUS_IGNORED,
|
||||
task_status: TaskStatus[trio.Nursery] = trio.TASK_STATUS_IGNORED,
|
||||
) -> None:
|
||||
"""Start the channel server, begin listening for new connections.
|
||||
|
||||
|
@ -794,7 +797,7 @@ class Actor:
|
|||
# signal the server is down since nursery above terminated
|
||||
self._server_down.set()
|
||||
|
||||
async def cancel(self) -> None:
|
||||
async def cancel(self) -> bool:
|
||||
"""Cancel this actor.
|
||||
|
||||
The "deterministic" teardown sequence in order is:
|
||||
|
@ -807,10 +810,16 @@ class Actor:
|
|||
"""
|
||||
# cancel all ongoing rpc tasks
|
||||
with trio.CancelScope(shield=True):
|
||||
# kill all ongoing tasks
|
||||
await self.cancel_rpc_tasks()
|
||||
|
||||
# stop channel server
|
||||
self.cancel_server()
|
||||
await self._server_down.wait()
|
||||
self._service_n.cancel_scope.cancel()
|
||||
|
||||
# rekt all channel loops
|
||||
if self._service_n:
|
||||
self._service_n.cancel_scope.cancel()
|
||||
|
||||
return True
|
||||
|
||||
|
|
|
@ -338,9 +338,9 @@ async def open_portal(
|
|||
if channel.uid is None:
|
||||
await actor._do_handshake(channel)
|
||||
|
||||
msg_loop_cs = None
|
||||
msg_loop_cs: Optional[trio.CancelScope] = None
|
||||
if start_msg_loop:
|
||||
msg_loop_cs: trio.CancelScope = await nursery.start(
|
||||
msg_loop_cs = await nursery.start(
|
||||
partial(
|
||||
actor._process_messages,
|
||||
channel,
|
||||
|
|
Loading…
Reference in New Issue