繁体   English   中英

在异步/等待中等待外部异步

[英]await outside async in async/await

在异步之前使用多处理进程,以测试哪个更快我正在尝试使用异步运行代码,但它给了我一个错误消息: 'await'outside async

我的代码:

import asyncio
import time

async def sleep():
    print(f'Time: {time.time() - start:.2f}')
    await asyncio.sleep(1)

async def sum(name, numbers):

    def sum_(numbers):
        total = 0
        print(f'Task {name}: Computing {total}+{number}')
        await sleep()
        total += number
        print(f'Task {name}: Sum = {total}\n')

    for number in numbers:
        sum_(numbers)

start = time.time()

loop = asyncio.get_event_loop()
tasks = [
    loop.create_task(sum("A", [1, 2])),
    loop.create_task(sum("B", [1, 2, 3])),
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

end = time.time()
print(f'Time: {end-start:.2f} sec')

请注意:这只是一个代码示例,在原始代码中我无法按照以下方式执行操作:

    for number in numbers:
        sum_(numbers)
        await sleep()

按照此评论的建议测试 asyncio

sum_是一个单独的 function,就 Python 而言。 如果你想在 function 中await ,它需要是async 而如果你想调用一个async function,你需要await它。

async def sum(name, numbers):

    async def sum_(numbers): # <-- This function needs to be async
        total = 0
        print(f'Task {name}: Computing {total}+{number}')
        await sleep()
        total += number
        print(f'Task {name}: Sum = {total}\n')

    for number in numbers:
        await sum_(numbers) # <-- And we need to await it here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM