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

作者:梦醒人醉 时间:2021-03-24 04:27:54 

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()) # 运行次循环

来源:https://blog.csdn.net/qq_29349715/article/details/79730786

标签:python,协程,任务
0
投稿

猜你喜欢

  • sqlserver 导出插入脚本代码

    2024-01-26 22:39:18
  • python去除拼音声调字母,替换为字母的方法

    2022-02-13 10:43:55
  • python编辑用户登入界面的实现代码

    2022-02-07 20:24:08
  • PHP简易延时队列的实现流程详解

    2023-05-29 23:02:48
  • ASP中正则表达式的应用

    2010-05-27 12:24:00
  • Pytorch 图像变换函数集合小结

    2022-06-14 08:52:09
  • Python利用Matplotlib库实现绘制饼形图

    2021-08-13 11:08:51
  • 浅析SQL Server中包含事务的存储过程

    2024-01-15 21:27:39
  • python中使用iterrows()对dataframe进行遍历的实例

    2023-12-29 13:43:02
  • asp测字符串长度及截取定长字符串汉字的处理

    2007-10-12 13:14:00
  • Mysql查询表中最小可用id值的方法

    2024-01-27 02:31:29
  • 红黑树的插入详解及Javascript实现方法示例

    2024-04-19 11:03:13
  • python制作的天气预报小工具(gui界面)

    2022-04-03 17:20:42
  • python加密打包程序详解

    2021-03-02 02:02:46
  • JavaScript框架比较:选择器

    2010-04-20 14:48:00
  • Python列表对象实现原理详解

    2022-09-07 10:24:58
  • python sys.stdin和sys.stdout的用法说明

    2022-04-05 07:35:29
  • python实现自动登录

    2023-10-20 05:11:46
  • 让你的空间支持域名绑定子目录的解决办法

    2010-09-15 10:03:00
  • 避免使用滤镜

    2009-10-13 20:30:00
  • asp之家 网络编程 m.aspxhome.com