zoukankan      html  css  js  c++  java
  • python-asyncio

    参考
    参考

    • python由于GIL(全局锁)的存在,不能发挥多核的优势,在io密集型的网络里,异步处理能大幅提升效率

    • coroutine(协程)

      • 协程处理逻辑
        • 通常用生产者-消费者设计模式来处理协程
        • 创建协程 -> 添加到队列 -> 创建协程 -> 添加到队列 -> 消费者绑定对象 -> 消费者消费队列中的协程
    • 任务处理的逻辑

      • 同步:触发任务1->处理任务1->触发任务2->处理任务2->顺序执行
      • 异步:触发任务1->触发任务2->触发任务3(只触发,不处理)
    def sync_run():
        print('start') # 打印事件,处理
        time.sleep(1)  # 等待事件,处理
        print('end')   # 打印事件,处理
    
    
    
    import asyncio
    
    async def demo(n: int):
        print('start',n)
        await asyncio.sleep(n)
        print('stop',n)
    
    tasks = []
    
    # 打印2112
    tasks.append(demo(2)) 
    tasks.append(demo(1))
    
    # 打印1212
    # tasks.append(demo(1))
    # tasks.append(demo(2))
    
    loop = asyncio.get_event_loop()
    future = asyncio.wait(tasks)
    loop.run_until_complete(future) # 消费
    
    
    • async&asyncio
      • async def demo():pass,定义一个方法,这个方法是异步方法,demo()后会创建一个coroutine协程对象,然后交出执行权,不会像方法一样直接执行,必须加入到event loop后统一执行
      • await,执行协程过程中遇到了await,则会在异步任务开始之后暂停当前协程的执行,把执行权交给其他任务,等到异步任务执行结束,再执行
      • 创建协程对象,执行协程
      • 创建event-loop,创建协程对象,执行协程对象,遇到异步任务,交出执行权,执行下一个协程对象,一直循环这个处理逻辑

    总结:async描述一个协程对象,await描述一个异步任务,queue存储协程对象,loop处理协程对象和异步任务

  • 相关阅读:
    Mac上如何用命令行修改proxy设置
    Mac上解决访问github慢问题
    Bootstrap布局
    ListView详解
    sql server命名规范
    表的管理与操作
    常用编程技巧和方法
    有联系的jQuery选择器
    sql基础查询语句
    数值特征
  • 原文地址:https://www.cnblogs.com/bonus_scene/p/15187512.html
Copyright © 2011-2022 走看看