zoukankan      html  css  js  c++  java
  • asyncio

    3.1事件循环

    理解成为一个死循环,去检测并执行某些代码。

    仿代码
    任务列表-【任务1。任务2。任务3.]
    while True:
          可执行的任务列表,已完成的任务列表 = 去任务列表中检查所有的任务,将"可执行" 和 "已完成"的任务返回
          for就绪任务  in可执行的任务列表:
                执行已就堵旳任务
    
          for已完成的任务 in已完成任务列表:
                在任务列表中移除已完成任务
    
          如果任务列表中的任务都已完成,则终止循环
    
    import asyncio
    # 去生成或获取一个事件循环
    loop = asyncio.get_event_loop()
    
    # 将任务放到"任务列表"
    loop.run_until_complete(任务)
    

    3.2快速上手

    协程函致,定义函数时候async def 函数名
    协程对象,抗行协程纽数D得到的协程对象。
    async def funcO:
    pss
    result - funco
    注意;执行协程函致刨建协程对象,函数内郎代码不会执行。
    如果想要运行协程函数内部代码,必须要将协程对象交给事件循环来处理

    import asyncio
    async def func():
          print("回家吃饭了")
    result = func()
    # 1oop = asyncio.get_event_loop()
    # loop.run_unti_complete(result)  # 通用的
    asyncio.run(result)    # 以上两句可以简写成一句     python3.7才有的简写
    

    3.3 await

    await +可等待的对象(协程对象, Future, Task对象-->IO等待)

    import asyncio
    async def func():
          print("来玩")
          respomse = await asyncio.sleep(2)
          print("结束",response)
    asyncio.run( func())
    

    示例2:

    import asyncio
    async def others():
          print("start")
          await asyncio.sleep(2)
          print("end")
          return "返回值"
    
    async def func():
          print("执行协程函数内部代码")
          # 遇到1O操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其它协程(任务)
          response = await others()
          print("IO请求结来,结果为:",response)
    asyncio.run(func())
    

    示例3:

    import asyncio
    async def others():
          print("start")
          await asyncio.sleep(2)
          print("end")
          return "返网值"
    
    async def func():
          print("执行协程函数内部代码")
          # 遇到1o操作挂起当前协程(任务), 等1O操作完成之后再继续往下纨行。当前协程挂起时,事件循环可以么执行其它协程(任务).
          response1 =  await othtrs()
          print("io请求结果。response1结果为", response1)
          
          response2 = await othtrs()
          print("io请求结果。response2结果为", response2)
    asyncio.run(func())
    
    # await就是等待对象的值得到结果之后再继续向下处走。
    

    白话:在事件循还中添加多个任务的。
    Tasks用于并发调度协程,通过asyncio.create_task(协程对象)的方式创建Task对象,这样可以让协程加入事件循环中等待被调度执行。
    除了使用asyncio.create_task()函数以外。还可以用低层级的loop.create_task( )或 ensure_future() 函效。不建议手动实例化Task对象。

    注意;asyncio.create_task() 函数在Python3.7中被加入。在Python 3.7之前,可以改用低层级的asyncio.ensure_future()函数.

    示例1:

    import asymcio
    async def func():
          print(1)
          amait asyncio.sleep(2)
          print(1)
          return "返回值"
    
    async def main():
          print("main开始")
          task1 = asyncio.create_task(func()))
          task2 = asyncio.create_task(func()))
          print("main结束")
          
          # 当执行某协程遭遇IO操作时,会自动化切换执行其他任务.
          # 此处await是等待相对应的协程全都执行完毕并获取结果
          ret1 = await task1
          ret2 = await task2
          print(ret1. ret2
    
    asyncio.run(main())
    

    示例2:

    import asyncio
    async def func():
          print(1)
          await asyncio.sleep(2)
          print(2)
          return "返密值"
    
    async def main():
        print("main开始")
        task_1ist = [
            asyncio.create task(func()),
            asyncio.create task(func())
          ]
        print("main结束了")
        done.pending = await asyncio.wait(task_1ist.timecut=None)
        print(done)
    asyncio.run(main())
    

    示例3:

    import asyncio
    async def func():
        print(1)
        await asyncio.sleep(2)
        print(2)
        return "返需值"
    
        task_1ist =[
            func(),
            func()
          ]
    done.pending = asyncio.run(asyncio.await(task_list))
    print(done)
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/heris/p/14278320.html
Copyright © 2011-2022 走看看