我正在尝试从一个循环中触发一个协程。这是我要实现的简单示例:
import time
import random
import asyncio
def listen():
while True:
yield random.random()
time.sleep(3)
async def dosomething(data: float):
print("Working on data", data)
asyncio.sleep(2)
print("Processed data!")
async def main():
for pos in listen():
asyncio.create_task(dosomething(pos))
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
不幸的是,这不起作用,我的dosomething
协程从不执行...我在做什么错?
asyncio.create_task函数的目标是schedule任务执行,应等待它完成。
此外,还应等待代码中的asyncio.sleep(2)
,否则它将引发错误/警告。
正确的方法:
import time
import random
import asyncio
def listen():
while True:
yield random.random()
time.sleep(3)
async def dosomething(data: float):
print("Working on data", data)
await asyncio.sleep(2)
print("Processed data!")
async def main():
for pos in listen():
await asyncio.create_task(dosomething(pos))
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())