- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
Python协程的实现方法有哪些?
2.协程意义
在线程中如果遇到IO等待时间,线程不会傻等着,会利用空闲的时间去做其他事情,也就是进程异步执行。
#协程请求资源使用第三方库aiohttp
importaiohttp
3.异步编程
3.1时间循环
理解成一个死循环,去检测并执行某些代码
任务列表=[task1,task2...]
whileTrue:
for就绪任务in可执行任务列表:
for已完成任务in已完成任务列表:
从任务列表中删除
importasyncio
#生成一个书简循环
loop=asyncio.get_event_loop()
#将任务放到任务列表中
loop.run_until_complete(任务)
3.2案例
协程函数,
定义函数的时候,用asyncdef函数名
协程对象:执行协程函数的时候得到一个协程对象
asyncdeffunc():
pass
result=func()
注意:执行协程函数时得到的协程对象,函数内部代码不会执行
importasyncio
asyncdeffunc():
print(哈喽)
f=func()#协程对象
loop=asyncio.get_event_loop()#创建循环对象
loop.run_until_complete(f)#通过循环对象执行协程对象
#python3.7可以直接
asyncio.run(f)
3.3await关键字
await+可等待的对象{协程对象,Future对象,Task对象}(类似于IO等待)
importasyncio
asyncdeffunc():
print(哈喽)
re=awaitasyncio.sleep(2)
print(re)
asyncio.run(func())
await就是等待对象的值得到结果后再继续向下执行
importasyncio
asyncdefother():
print(start)
awaitasyncio.sleep(2)
print(end)
return1
asyncdeffun():
print(执行协程函数内部代码)
#遇到IO操作时会挂起当前协程任务,等IO操作完成后再继续往下执行,当前协程挂起时,时间循环对象可以执行其他协程任务
re=awaitother()
print(IO请求结束,结果为:,re)
asyncio.run(func())
执行结果
执行协程函数内部代码
start
end
IO请求结束,结果为:1
文档评论(0)