网站制作学习网Python→正文:python 异步并发任务
字体:

python 异步并发任务

Python 2024/1/17 20:07:46  点击:不统计

<本文原载于www.forasp.cn>
 python 如何做并发异步执行多个任务,并再所有任务完毕后,继续执行。

import asyncio


async def task1():
print("task1 开始执行")
await asyncio.sleep(3)
print("task1 执行完成")
return "result1"


async def task2():
print("task2 开始执行")
await asyncio.sleep(1)
print("task2 执行完成")
return "result2"


async def main():
# 使用 asyncio.ensure_future 同时启动 task1 和 task2
task1_bar = asyncio.ensure_future(task1())
task2_bar = asyncio.ensure_future(task2())

await asyncio.gather(task1_bar, task2_bar)
print("所有任务完成")

# 获取事件循环对象
loop = asyncio.get_event_loop()

# 在事件循环中运行主程序
loop.run_until_complete(main())
输出结果:
main 函数继续执行
task1 开始执行
task2 开始执行
task2 执行完成
task1 执行完成
所有任务完成

如果想监控每个任务完成,并跟踪返回值,则看下面代码
import asyncio


async def task1():
print("task1 开始执行")
await asyncio.sleep(3)
print("task1 执行完成")
return "result1"


async def task2():
print("task2 开始执行")
await asyncio.sleep(1)
print("task2 执行完成")
return "result2"


async def main():
# 使用 asyncio.ensure_future 同时启动 task1 和 task2
task1_bar = asyncio.ensure_future(task1())
task2_bar = asyncio.ensure_future(task2())
done, pending = await asyncio.wait([task1_bar, task2_bar], return_when=asyncio.ALL_COMPLETED)
# 处理已完成的任务
for task in done:
result = task.result()
print(f"任务完成: {result}")

# 处理未完成的任务(如果有)
for task in pending:
print(f"任务未完成: {task}")

# 获取事件循环对象
loop = asyncio.get_event_loop()

# 在事件循环中运行主程序
loop.run_until_complete(main())




输出结果:
task1 开始执行
task2 开始执行
task2 执行完成
task1 执行完成
任务完成: result2
任务完成: result1
 

·上一篇:python激活虚拟环境 >>    ·下一篇:网站制作学习网
推荐文章
最新文章