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实现从url中提取域名的几种方法
Sep 26 Python
python事件驱动event实现详解
Nov 21 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
python装饰器常见使用方法分析
Jun 26 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
python多线程并发及测试框架案例
Oct 15 Python
pycharm显示远程图片的实现
Nov 04 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 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
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
js tab 选项卡
2009/04/26 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
Three.js基础学习教程
2017/11/16 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
Python实现优先级队列结构的方法详解
2016/06/02 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
python 写一个水果忍者游戏
2021/01/13 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
会计电算化应届生求职信
2013/11/03 职场文书
人事行政主管岗位职责
2013/12/22 职场文书
中国梦口号
2014/06/13 职场文书
促销活动总结模板
2014/07/01 职场文书
感恩教育月活动总结
2014/07/07 职场文书
党员民主评议总结
2014/10/20 职场文书
2014年文员工作总结
2014/11/18 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python