Working with SublemonSubprocess
Objects¶
The SublemonSubprocess
class provides a small wrapper over the Process
class provided by asyncio
, with the plumbing allowing it to interact with Sublemon
runtime objects as well as a future extra lifetime-related coroutines.
Hashing and equality between objects¶
Instances of SublemonSubprocess
are hashable, but each instance is spawned with a UUID to ensure that hashes of otherwise-identical instances never collide. This can be useful for tracking subjects
Lifetime events¶
This class also provides some awaitable events in the form of wait_running
and wait_done
coroutines. The wait_running
coroutine will block until an underlying subprocess has actually been spawned on the system and the wait_done
coroutine will block until the subprocess has terminated. Here's an example so you can see the gist of how this works:
>>> import asyncio >>> from sublemon import crossplat_loop_run, Sublemon >>> async def example(): ... async with Sublemon(max_concurrency=1) as s: ... sp_one, sp_two = s.spawn( ... 'python -c "import time; time.sleep(1)"', ... 'python -c "import time; time.sleep(1)"') ... await asyncio.gather( ... sp_one.wait_running(), ... sp_two.wait_running()) ... print('Both subprocesses now running!') ... await asyncio.gather( ... sp_one.wait_done(), ... sp_two.wait_done()) ... print('Both subprocesses all done!') ... >>> crossplat_loop_run(example()) Both subprocesses now running! Both subprocesses all done!
Additional properties¶
stdout -> AsyncGenerator[str, None]
- an asynchronous generator yielding the raw line-by-line bytes from the subprocess's stdout streamstderr -> AsyncGenerator[str, None]
- an asynchronous generator yielding the raw line-by-line bytes from the subprocess's stderr streamcmd -> str
- the shell command used (or that will be used) to spawn this subprocessexit_code -> Optional[int]
- the exit code of the subprocess, which will beNone
until the subprocess terminatesis_pending -> bool
- whether the subprocess is still waiting to be spawnedis_running -> bool
- whether the subprocess is currently executingis_done -> bool
- whether the subprocess has completed executionscheduled_at -> datetime
- when this subprocess moved into a pending state within theSublemon
instance from which it was spawnedbegan_at -> Optional[datetime]
- when this subprocess was actually spawned and began execution from within the correspondingSublemon
instance