这是一个简单的同步任务
import time
def run(i):
print('开启任务=====', i)
time.sleep(2)
print('结束任务=====', i)
if __name__ == '__main__':
for i in range(1, 5):
run(i)
运行过程
开启任务===== 1
结束任务===== 1
开启任务===== 2
结束任务===== 2
开启任务===== 3
结束任务===== 3
开启任务===== 4
结束任务===== 4
进程已结束,退出代码0
把同步任务改造成异步任务(协程)
import asyncio
import random
async def run(i):
print('开启任务=====', i)
await asyncio.sleep(random.randint(3, 8))
print('结束任务=====', i)
if __name__ == '__main__':
task_list = []
for i in range(1, 5):
c = run(i) # 协程对象
task = asyncio.ensure_future(c)
task_list.append(task)
loop = asyncio.get_event_loop()
# 使用asyncio.wait把我们多任务的列表注册到时间循环上
loop.run_until_complete(asyncio.wait(task_list))
# print(asyncio.wait(task_list))
改造第1步,导入函数
import asyncio
改造第2步,把“普通函数”改造成“协程函数”
def run(i):
--> async def run(i):
改造第3步 ,time.sleep()
是同步代码写法,协程阻塞写法应该使用asyncio.sleep()
time.sleep()
--> asyncio.sleep()
改造第4步 ,使用await
挂起阻塞调用
asyncio.sleep()
--> await asyncio.sleep()
被async
定义的函数def run(i)
,里面的耗时任务asyncio.
,必须被await
挂起,
改造第5步 ,将主题函数中的运行函数,改造成“协程对象”
run(i):
--> c = run(i)
改造第6步 ,创建task任务,并把run塞入
task = asyncio.ensure_future(c)
改造第7步 ,把task任务统一放入事件循环中,因此提前创建一个task_list = []空列表,再把每次for循环出来的分task任务依次接收进来
task_list = []
task_list.append(task)
改造第8步 ,
标签:__,web,task,run,Python,sleep,协程,asyncio From: https://www.cnblogs.com/Magiclala/p/18053705