python协程之动态添加任务的方法

 更新时间:2019年02月19日 14:16:30   作者:梦醒人醉  
今天小编就为大家分享一篇python协程之动态添加任务的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

python协程只能运行在事件循环中,但是一旦事件循环运行,又会阻塞当前任务。所以只能在当前进程中再开一个线程,这个线程的主要任务是运行事件循环,就是event_loop,因为他是一个无限循环,会阻塞当前线程。

放一个自己写的demo,注释写的很详细。

另外还有一点需要注意,一个事件循环中不能运行另外一个事件循环。

运行结果:

python协程之动态添加任务

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 解决 pip 时报错 no suchoption: --bulid-dir 的解决办法(最新推荐)

    python 解决 pip 时报错 no suchoption: --bulid-dir 的解决办法(最新

    在使用PyCharm虚拟环境pip时,有时会遇到错误提示“no such option: --build-dir”,这可能是由于pip版本不兼容或其他原因导致的,本文将详细讲解如何解决这个问题,感兴趣的朋友跟随小编一起看看吧
    2023-05-05
  • python数据结构链表之单向链表(实例讲解)

    python数据结构链表之单向链表(实例讲解)

    下面小编就为大家带来一篇python数据结构链表之单向链表(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Python字典一个key对应多个value几种实现方式

    Python字典一个key对应多个value几种实现方式

    python中字典的健和值是一一对应的,如果对字典进行添加操作时如果健的名字相同,则当前健对应的值就会被覆盖,有时候我们想要一个健对应多个值的场景,这篇文章主要给大家介绍了关于Python字典一个key对应多个value几种实现方式的相关资料,需要的朋友可以参考下
    2023-10-10
  • python 音频和视频合并自动裁剪

    python 音频和视频合并自动裁剪

    本文主要介绍了python 音频和视频合并自动裁剪,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • 基于PyQt5实现SqlServer数据库表导出Excel表格小工具

    基于PyQt5实现SqlServer数据库表导出Excel表格小工具

    这篇文章主要为大家详细介绍了PyQt5的应用案例之实现SqlServer数据库表导出Excel表格小工具,文中的示例代码讲解详细,需要的小伙伴可以参考一下
    2023-12-12
  • 详解python中的defaultdict 默认值

    详解python中的defaultdict 默认值

    这篇文章主要介绍了defaultdict 默认值,defaultdict是python内建dict类的一个字类,功能与dict相同,但它带有一个默认的值,若key值不存在时返回一个默认的值,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • OpenCV立体图像深度图Depth Map基础

    OpenCV立体图像深度图Depth Map基础

    这篇文章主要为大家介绍了OpenCV立体图像深度图Depth Map基础详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • python抓取网站的图片并下载到本地的方法

    python抓取网站的图片并下载到本地的方法

    今天小编就为大家分享一篇python抓取网站的图片并下载到本地的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python Django 创建应用过程图示详解

    python Django 创建应用过程图示详解

    这篇文章主要介绍了python Django 创建应用过程图示详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python3.x提取中文的正则表达式示例代码

    python3.x提取中文的正则表达式示例代码

    这篇文章主要介绍了python3.x中提取中文的正则表达式的书写,需要的朋友可以参考下
    2019-07-07

最新评论