多任务协程怎么写

Posted kingofcattle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多任务协程怎么写相关的知识,希望对你有一定的参考价值。

1.多任务协程  pip install asyncio(协程的模块) 和 pip install aiohttp(支持网络异步请求的的模块)
第一步:创建任特殊函数,在函数定义前面加上async关键字(用来发送请求)
该函数特殊之处:1.调用后不会立即执行 2.函数调用后返回一个协程对象
第二步:创建协程对象(相当于调用特殊函数),协程对象是特殊的函数
第三步:创建任务对象:task = asyncio.ensure_future(协程对象),并且将任务对象绑定回调函数,该函数用来获取特殊函数的返回值,
常用来作数据解析,和持久化存储task.add_done_callback(parse),其中parse就是回调函数,该函数必须有一个参数,该参数就是该函数的
绑定者,也就是相应的task,该参数的result方法就是来获取特殊函数的返回值
任务对象就是高级的协程对象

第四步:创建事件循环对象:loop = asyncio.get_event_loop()
事件循环对象的作用相当于一个容器,用来存储我们的任务对象的,开启后,就可以对容器里面的任务对象执行异步处理
第五步:将任务对象存储到事件循环对象中: loop.run_until_complete(asyncio.wait(tasks)) #tasks表示的是任务列表
注意: 在特殊函数内部的实现语句中不可以出现不支持异步的模块代码,比如resquest(),所以我们使用aiohttp代替
aiohttp的使用:
with aiohttp.ClientSession() as sess: # 调用相应的模块
with sess.get(url=url) as response: # get的使用方法和我们的request.get()差不多,就是代理为prox参数
page_text = response.text()
return page_text
想用他实现协程还需要在每一个with前面async在每一个阻塞的前面加上await关键字
async with aiohttp.ClientSession() as sess:
async with await sess.get(url=url) as response:
page_text = await response.text()
return page_text


最后一个自己写的例子 https://www.cnblogs.com/KingOfCattle/p/12991757.html

以上是关于多任务协程怎么写的主要内容,如果未能解决你的问题,请参考以下文章

单线程实现了多任务异步协程

Python多任务实现 之协程并发下载多图片

python爬虫--多任务异步协程, 快点,在快点......

进程线程和协程

多任务异步协程,asyncio及aiohttp

python 并发专题(十三):asyncio 协程中的多任务