forked from goodboy/tractor
1
0
Fork 0
Commit Graph

333 Commits (cb2d2ed9d5efb3bef6cc494bb4c9ae3e2fec90c8)

Author SHA1 Message Date
Tyler Goodlet cb2d2ed9d5 Proxy asyncio cancelleds as well 2021-05-31 09:29:45 -04:00
Tyler Goodlet 7b2543512c Power of 2 cuz puters 2021-05-31 09:29:45 -04:00
Tyler Goodlet 7d41492f53 Don't kill root's immediate children when in debug
If the root calls `trio.Process.kill()` on immediate child proc teardown
when the child is using pdb, we can get stdstreams clobbering that
results in a pdb++ repl where the user can't see what's been typed. Not
killing such children on cancellation / error seems to resolve this
issue whilst still giving reliable termination. For now, code that
special path until a time it becomes a problem for ensuring zombie
reaps.
2021-05-31 09:29:45 -04:00
Tyler Goodlet bc468d9140 WIP redo asyncio async gen streaming 2021-05-31 09:29:45 -04:00
Tyler Goodlet bf21c90461 Support asyncio actors with the trio spawner backend 2021-05-31 09:29:45 -04:00
Tyler Goodlet 316667a41f Support sync code breakpointing via built-in
Override `breakpoint()` for sync code making it work
properly with `trio` as per:

https://github.com/python-trio/trio/issues/1155#issuecomment-742964018

Relates to #193
2021-05-31 09:29:45 -04:00
Tyler Goodlet ad9ed19bce Support asyncio actors with the trio spawner backend 2021-05-31 09:29:28 -04:00
Tyler Goodlet 98a69f06b4 Support no arg to `Context.started()` like trio 2021-05-31 09:28:07 -04:00
Tyler Goodlet df420fcafc Export portal type at top level 2021-05-31 09:28:07 -04:00
Tyler Goodlet 72099985be Add per actor debug mode toggle 2021-05-31 09:28:07 -04:00
Tyler Goodlet b1d3e97697 Support sync code breakpointing via built-in
Override `breakpoint()` for sync code making it work
properly with `trio` as per:

https://github.com/python-trio/trio/issues/1155#issuecomment-742964018

Relates to #193
2021-05-31 09:28:07 -04:00
Tyler Goodlet d6b16cabbe Pass func refs 2021-05-31 09:27:40 -04:00
Tyler Goodlet 0f8699a96a Shush the linter 2021-05-31 09:27:40 -04:00
Tyler Goodlet 6476df2c69 Raise any asyncio errors if in trio task on cancel 2021-05-31 09:27:40 -04:00
Tyler Goodlet 762e6ad2a2 Raise from asyncio error; fixes mypy 2021-05-31 09:27:40 -04:00
Tyler Goodlet 6ae4d8699e Tweak log msg 2021-05-31 09:27:40 -04:00
Tyler Goodlet dd0cfe2f5a Log error 2021-05-31 09:27:40 -04:00
Tyler Goodlet 1f3de88422 Support asyncio actors with the trio spawner backend 2021-05-31 09:27:40 -04:00
Tyler Goodlet c34d4b54fd Revert removal of `infect_asyncio` in nursery start methods 2021-05-31 09:27:40 -04:00
Tyler Goodlet aed60dd7e2 Attempt to make mypy happy.. 2021-05-31 09:27:40 -04:00
Tyler Goodlet 5f0ed8e7bd Add an obnoxious error message on internal failures 2021-05-31 09:27:40 -04:00
Tyler Goodlet a9985c0c01 Wow, fix all the broken async func invoking code..
Clearly this wasn't developed against a task that spawned just an async
func in `asyncio`.. Fix all that and remove a bunch of unnecessary func
layers. Add provisional support for the target receiving the `to_trio`
and `from_trio` channels and for the @tractor.stream marker.
2021-05-31 09:27:40 -04:00
Tyler Goodlet 940774f215 Drop entrypoints from `Actor` 2021-05-31 09:27:40 -04:00
Tyler Goodlet db15162f04 Move asyncio guest mode entrypoint to `to_asyncio`
The function is useful if you want to run the "main process" under
`asyncio`. Until `trio` core wraps this better we'll keep our own copy
in the interim (there's a new "inside-out-guest" mode almost on
mainline so hang tight).
2021-05-31 09:27:40 -04:00
Tyler Goodlet 9d4dba23a6 Propagate any spawned `asyncio` task error upwards
This should mostly maintain top level SC principles for any task spawned
using `tractor.to_asyncio.run()`. When the `asyncio` task completes make
sure to cancel the pertaining `trio` cancel scope and raise any error
that may have resulted.

Resolves #120
2021-05-31 09:27:40 -04:00
Tyler Goodlet 24c6a65873 Add a @pub kwarg to allow specifying a "startup response message" 2021-05-31 09:27:10 -04:00
Tyler Goodlet 35465a5438 Catch and delay errors in the root if debugger is active 2021-05-31 09:26:26 -04:00
Tyler Goodlet 5b3f554f57 Don't shield on root cancel it can causes hangs 2021-05-31 09:26:17 -04:00
Tyler Goodlet 0d0e0bc2da Experiment: only disable SIGINT handling in children 2021-05-31 09:26:05 -04:00
Tyler Goodlet 19825ba284 Don't kill root's immediate children when in debug
If the root calls `trio.Process.kill()` on immediate child proc teardown
when the child is using pdb, we can get stdstreams clobbering that
results in a pdb++ repl where the user can't see what's been typed. Not
killing such children on cancellation / error seems to resolve this
issue whilst still giving reliable termination. For now, code that
special path until a time it becomes a problem for ensuring zombie
reaps.
2021-05-31 09:25:47 -04:00
Tyler Goodlet 4a16f03fe8 Fix up var naming and typing 2021-05-31 09:25:38 -04:00
Tyler Goodlet 63e13aefdb Only send stop msg if not received from far end 2021-05-31 09:25:38 -04:00
Tyler Goodlet bfa4410133 Expose msg stream types at top level 2021-05-31 09:25:38 -04:00
Tyler Goodlet 420cd8de13 Use context for remote debugger locking
A context is the natural fit (vs. a receive stream) for locking the root
proc's tty usage via it's `.started()` sync point. Simplify the
`_breakpoin()` routine to be a simple async func instead of all this
"returning a coroutine" stuff from before we decided that
`tractor.breakpoint()` must be async. Use `runtime` level for locking
logging making it easier to trace.
2021-05-31 09:25:38 -04:00
Tyler Goodlet 01bef653c2 Be more pedantic with error handling 2021-05-31 09:25:38 -04:00
Tyler Goodlet 899404932a Fix typing 2021-05-31 09:25:38 -04:00
Tyler Goodlet e46ef8ae3f Support passing `shield` at stream contruction 2021-05-31 09:25:38 -04:00
Tyler Goodlet f792aa06b5 Expose `@context` decorator at top level 2021-05-31 09:25:38 -04:00
Tyler Goodlet 15fa777ddf Add initial bi-directional streaming
This mostly adds the api described in
https://github.com/goodboy/tractor/issues/53#issuecomment-806258798

The first draft summary:
- formalize bidir steaming using the `trio.Channel` style interface
  which we derive as a `MsgStream` type.
- add `Portal.open_context()` which provides a `trio.Nursery.start()`
  remote task invocation style for setting up and tearing down tasks
  contexts in remote actors.
- add a distinct `'started'` message to the ipc protocol to facilitate
  `Context.start()` with a first return value.
- for our `ReceiveMsgStream` type, don't cancel the remote task in
  `.aclose()`; this is now done explicitly by the surrounding `Context`
   usage: `Context.cancel()`.
- streams in either direction still use a `'yield'` message keeping the
  proto mostly symmetric without having to worry about which side is the
  caller / portal opener.
- subtlety: only allow sending a `'stop'` message during a 2-way
  streaming context from `ReceiveStream.aclose()`, detailed comment
  with explanation is included.

Relates to #53
2021-05-31 09:25:38 -04:00
Tyler Goodlet 73e123bac7 Fix line length 2021-05-07 11:21:40 -04:00
Tyler Goodlet 1584c547cd Drop run and rpc_module_paths from discovery tests 2021-05-07 11:21:40 -04:00
Tyler Goodlet 87971de1d9 Re-raise any sidestepped `trio.Cancelled` 2021-05-06 12:05:17 -04:00
Tyler Goodlet 9f38406e85 Appease mypy 2021-05-06 12:05:17 -04:00
Tyler Goodlet c4b42000eb Shield around root actor cancel 2021-05-06 12:05:17 -04:00
Tyler Goodlet 607c48f1ac Distinctly separate and harden mp spawning
It's clear now that special attention is needed to handle the case where
a spawned `multiprocessing` proc is started but then the parent is
cancelled before the child can connect back; in this case we need to be
sure to kill the near-zombie child asap. This may end up being the
solution to other resiliency issues seen around mp with nested process
trees too. More testing is needed to be sure.

Relates to #84 #89 #134 #146
2021-05-06 12:05:17 -04:00
Tyler Goodlet fc36e73628 Comment out `MsgStream` for now 2021-04-28 16:40:38 -04:00
Tyler Goodlet f59346d854 Add func type checking to `.run_in_actor()` 2021-04-28 12:23:08 -04:00
Tyler Goodlet 86fc418050 Error on bad registry pops 2021-04-28 12:23:08 -04:00
Tyler Goodlet 83af295b45 Fix func type checking 2021-04-28 12:23:08 -04:00
Tyler Goodlet ad9256bcdb Drop stream exhaustion; no longer needed 2021-04-28 12:23:08 -04:00