zoukankan      html  css  js  c++  java
  • 多任务协程怎么写

    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
  • 相关阅读:
    【排序】题解_P1093奖学金
    简单了解连接服务器的要求
    centos7安装(纯文字版)
    JAVA虚拟机
    集合
    IO流
    反射
    多线程
    JAVA基础
    博客园皮肤文档
  • 原文地址:https://www.cnblogs.com/KingOfCattle/p/12991766.html
Copyright © 2011-2022 走看看