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


Posted in Python onFebruary 19, 2019

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 相关文章推荐
Python面向对象之继承代码详解
Jan 29 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
用Python解数独的方法示例
Oct 24 Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
Python 如何创建一个线程池
Jul 28 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 Python
python 如何将office文件转换为PDF
Sep 22 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
Python同步遍历多个列表的示例
Feb 19 #Python
python读取txt文件并取其某一列数据的示例
Feb 19 #Python
详解Python3注释知识点
Feb 19 #Python
Python3解释器知识点总结
Feb 19 #Python
python 利用文件锁单例执行脚本的方法
Feb 19 #Python
对Python协程之异步同步的区别详解
Feb 19 #Python
在python里从协程返回一个值的示例
Feb 19 #Python
You might like
利用php绘制饼状图的实现代码
2013/06/07 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP中“=>
2019/03/01 PHP
任意位置显示html菜单
2007/02/01 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
python通过tcp发送xml报文的方法
2018/12/28 Python
在python 中实现运行多条shell命令
2019/01/07 Python
python对常见数据类型的遍历解析
2019/08/27 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
Gap英国官网:Gap UK
2018/07/18 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
拖鞋店创业计划书
2014/01/15 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers