【发布时间】:2016-03-05 00:53:03
【问题描述】:
我正试图围绕 Python3 中出现的新异步功能。
我从 stackoverflow 上找到的一个简单的 worker 示例开始,稍作修改:
import asyncio, random
q = asyncio.Queue()
@asyncio.coroutine
def produce(name):
while True:
value = random.random()
yield from q.put(value)
print("Produced by {0}".format(name))
yield from asyncio.sleep(1.0 + random.random())
@asyncio.coroutine
def consume(name):
while True:
value = yield from q.get()
print("Consumed by {0} ({1})".format(name, q.qsize()))
yield from asyncio.sleep(1.2 + random.random())
loop = asyncio.get_event_loop()
loop.create_task(produce('X'))
loop.create_task(produce('Y'))
loop.create_task(consume('A'))
loop.create_task(consume('B'))
loop.run_forever()
我基本了解它是如何工作的(可能除了yield from asyncio.sleep()...它是委托但阻塞函数的占位符吗?它在哪里产生?)
但是,最重要的是,我怎样才能改变这个例子来使用新的花哨的 async def 和 await 关键字?又有什么收获呢?
【问题讨论】: