来自实例a的for循环的协程

问题描述 投票:0回答:1

我正在尝试从一个循环中触发一个协程。这是我要实现的简单示例:

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协程从不执行...我在做什么错?

python python-asyncio coroutine
1个回答
0
投票

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())
© www.soinside.com 2019 - 2024. All rights reserved.