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函数中的默认参数
Mar 30 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
Python Flask框架模板操作实例分析
May 03 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 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代码包装修正版
2008/03/15 PHP
如何用php获取文件名后缀
2013/06/09 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
微型企业创业投资计划书
2014/01/10 职场文书
补充协议书范本
2014/04/23 职场文书
摄影展策划方案
2014/06/02 职场文书
空气环保标语
2014/06/12 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
2015年教师节活动总结
2015/03/20 职场文书
党委工作总结2015
2015/04/27 职场文书
仓库管理制度范本
2015/08/04 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技