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 beNoneuntil 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 theSublemoninstance from which it was spawnedbegan_at -> Optional[datetime]- when this subprocess was actually spawned and began execution from within the correspondingSublemoninstance