Python Asyncio完成后立即显示每个任务结果的结果
目前我使用Python Asyncio完成后立即显示每个任务结果的结果,python,python-3.x,Python,Python 3.x,目前我使用asyncio.wait(*tasks)完成所有任务,然后显示每个任务的结果。尽管如此,我还是想在具体任务完成后展示每个任务的结果。有这样的选择吗?我看到两种解决方案 直接在任务中显示它——但这可能对您不感兴趣 分配回调函数,该函数将在任务完成时执行 task.add_done_callback(show_result) 最小工作示例 import asyncio import random def show_result(task): ""&q
asyncio.wait(*tasks)
完成所有任务,然后显示每个任务的结果。尽管如此,我还是想在具体任务完成后展示每个任务的结果。有这样的选择吗?我看到两种解决方案
任务中显示它
——但这可能对您不感兴趣
回调
函数,该函数将在任务
完成时执行
task.add_done_callback(show_result)
最小工作示例
import asyncio
import random
def show_result(task):
"""callback"""
number, time = task.result()
print(f'callback: number: {number} time: {time}')
async def task(number, time):
print(f'start : number: {number} time: {time}')
await asyncio.sleep(time)
print(f'end : number: {number} time: {time}')
return number,time
async def main():
# random times for sleep
times = list(range(1, 6))
random.shuffle(times)
# create tasks with callbacks
tasks = []
for number, time in enumerate(times):
t = asyncio.create_task(task(number, time))
t.add_done_callback(show_result)
tasks.append(t)
print('--- during wait ---')
await asyncio.wait(tasks)
print('--- after wait ---')
# display results also after all tasks
for t in tasks:
#print('result:', t.result())
show_result(t)
asyncio.run(main())
结果:
--- during wait ---
start : number: 0 time: 5
start : number: 1 time: 4
start : number: 2 time: 2
start : number: 3 time: 3
start : number: 4 time: 1
end : number: 4 time: 1
callback: number: 4 time: 1
end : number: 2 time: 2
callback: number: 2 time: 2
end : number: 3 time: 3
callback: number: 3 time: 3
end : number: 1 time: 4
callback: number: 1 time: 4
end : number: 0 time: 5
callback: number: 0 time: 5
--- after wait ---
callback: number: 0 time: 5
callback: number: 1 time: 4
callback: number: 2 time: 2
callback: number: 3 time: 3
callback: number: 4 time: 1
你现在如何“展示”结果?您是否正在使用
print(wait asyncio.wait(*tasks)
?对于您想要的用法,除了“显示”每个结果之外,您是否还想获得一个结果列表?某些任务可能会得到任务结束后执行的回调
,并且您可以使用将显示结果的函数名。