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 23 Python
盘点提高 Python 代码效率的方法
Jul 03 Python
Python网站验证码识别
Jan 25 Python
Python 加密的实例详解
Oct 09 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
Python实现的凯撒密码算法示例
Apr 12 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
python3中TQDM库安装及使用详解
Nov 18 Python
提取视频中的音频 Python只需要三行代码!
May 10 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实现的随机广告显示代码
2007/06/14 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
Django中的ajax请求
2018/10/19 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
市三好学生主要事迹
2014/01/28 职场文书
运动会邀请函范文
2014/02/06 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
党支部承诺书
2015/01/20 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
户外拓展训练感想
2015/08/07 职场文书
安全生产标语口号
2015/12/26 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书