• 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处理协程对象和异步任务

  • 相关阅读:
    Struts2笔记——ONGL表达式语言
    Struts2笔记——自定义拦截器
    Struts2笔记——Action校验器
    Struts2笔记——文件上传
    Struts2笔记——与ServletAPI解耦
    Struts2笔记——通配符和动态方法调用
    Struts2笔记——类型转换
    Struts2笔记——result结果类型
    MongoDB相关资料
    公开数据集
  • 原文地址:https://www.cnblogs.com/bonus_scene/p/15187512.html
Copyright © 2020-2023  润新知