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)
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    ios获取iphone手机设备型号
    iOS项目中所有icon的尺寸以及命名
    c++达内视频
    ffmpeg教程
    FFMPEG SDK 教程
    minicom 下载
    线程同步的几种方法的总结
    多线程笔试面试概念问答
    buntu Rhythmbox解决中文乱码
    菜鸟学习ios
  • 原文地址:https://www.cnblogs.com/heris/p/14278320.html
Copyright © 2011-2022 走看看