• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python在协程中增加任务实例操作

    1、添加一个任务

    task2 = visit_url('http://another.com', 3)
    asynicio.run(task2)

    2、这 2 个程序一共消耗 5s 左右的时间。并没有发挥并发编程的优势

    import asyncio
    import time
    async def visit_url(url, response_time):
      """访问 url"""
      await asyncio.sleep(response_time)
      return f"访问{url}, 已得到返回结果"
    
    async def run_task():
      """收集子任务"""
      task = visit_url('http://wangzhen.com', 2)
      task_2 = visit_url('http://another', 3)
      await asyncio.run(task)
      await asyncio.run(task_2)
    asyncio.run(run_task())
    print(f"消耗时间:{time.perf_counter() - start_time}")

    3、如果是并发编程,这个程序只需要消耗 3s,也就是task2的等待时间。

    要想使用并发编程形式,需要把上面的代码改一下。asyncio.gather 会创建 2 个子任务,当出现 await 的时候,程序会在这 2 个子任务之间进行调度。

    async def run_task():
      """收集子任务"""
      task = visit_url('http://wangzhen.com', 2)
      task_2 = visit_url('http://another', 3)
      await asynicio.gather(task1, task2)

    实例扩展:

    import asyncio
    from threading import Thread
     
     
    async def production_task():
      i = 0
      while True:
        # 将consumption这个协程每秒注册一个到运行在线程中的循环,thread_loop每秒会获得一个一直打印i的无限循环任务
        asyncio.run_coroutine_threadsafe(consumption(i),
                         thread_loop) # 注意:run_coroutine_threadsafe 这个方法只能用在运行在线程中的循环事件使用
        await asyncio.sleep(1) # 必须加await
        i += 1
     
     
    async def consumption(i):
      while True:
        print("我是第{}任务".format(i))
        await asyncio.sleep(1)
     
     
    def start_loop(loop):
      # 运行事件循环, loop以参数的形式传递进来运行
      asyncio.set_event_loop(loop)
      loop.run_forever()
     
     
    thread_loop = asyncio.new_event_loop() # 获取一个事件循环
    run_loop_thread = Thread(target=start_loop, args=(thread_loop,)) # 将次事件循环运行在一个线程中,防止阻塞当前主线程
    run_loop_thread.start() # 运行线程,同时协程事件循环也会运行
     
    advocate_loop = asyncio.get_event_loop() # 将生产任务的协程注册到这个循环中
    advocate_loop.run_until_complete(production_task()) # 运行次循环

    到此这篇关于python在协程中增加任务实例操作的文章就介绍到这了,更多相关python在协程中增加任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 深入理解python协程
    • 详解Python生成器和基于生成器的协程
    • python 如何引入协程和原理分析
    • python3爬虫中异步协程的用法
    • Python协程的方式实现及意义笔记分享
    上一篇:python 制作本地应用搜索工具
    下一篇:python pyg2plot的原理知识点总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python在协程中增加任务实例操作 python,在,协程,中,增加,任务,