Yes, exactly. Tasks are your friends:
import asyncio, random
q = asyncio.Queue()
@asyncio.coroutine
def produce():
while True:
yield from q.put(random.random())
yield from asyncio.sleep(0.5 + random.random())
@asyncio.coroutine
def consume():
while True:
value = yield from q.get()
print("Consumed", value)
loop = asyncio.get_event_loop()
loop.create_task(produce())
loop.create_task(consume())
loop.run_forever()
asyncio.ensure_future
can be used for task creation also.
And please keep in mind: q.put()
is a coroutine, so you should to use yield from q.put(value)
.
UPD
Switched from asyncio.Task()
/asyncio.async()
to new brand API loop.create_task()
and asyncio.ensure_future()
in example.