python - How to start coroutines and continue with synchronous tasks? -
i trying understand asyncio
, port undestanding of threading
. take example of 2 threads running indefinitely , non-threaded loop (all of them outputting console).
the threading
version
import threading import time def a(): while true: time.sleep(1) print('a') def b(): while true: time.sleep(2) print('b') threading.thread(target=a).start() threading.thread(target=b).start() while true: time.sleep(3) print('c')
i tried port asyncio
based on documentation.
problem 1: not understand how add non-threaded task examples saw show ongoing loop @ end of program governs asyncio
threads.
i wanted have @ least 2 first threads (a
, b
) running in parallel (and, worst case, add third c
thread well, abandonning idea of mixed thread , non-threded operations):
import asyncio import time async def a(): while true: await asyncio.sleep(1) print('a') async def b(): while true: await asyncio.sleep(2) print('b') async def mainloop(): await a() await b() loop = asyncio.get_event_loop() loop.run_until_complete(mainloop()) loop.close()
problem 2: output sequence of a
, suggering b()
coroutine not called @ all. isn't await
supposed start a()
, come execution (and start b()
)?
await
stops execution @ point, await a()
, , have infinite loop in a()
, it's logical b()
doesn't called. think if insert a()
in mainloop()
.
consider example:
async def main(): while true: await asyncio.sleep(1) print('in') print('out (never gets printed)')
to achieve want need create future manage multiple coroutines. asyncio.gather
that.
import asyncio async def a(): while true: await asyncio.sleep(1) print('a') async def b(): while true: await asyncio.sleep(2) print('b') async def main(): await asyncio.gather(a(), b()) loop = asyncio.get_event_loop() loop.run_until_complete(main()) loop.close()
Comments
Post a Comment