python在协程中增加任务实例操作


Posted in Python onFebruary 28, 2021

1、添加一个任务

task2 = visit_url('http://another.com', 3)
asynicio.run(task2)

2、这 2 个程序一共消耗 5s 左右的时间。并没有发挥并发编程的优势

import asyncio
import time
async def visit_url(url, response_time):
  """访问 url"""
  await asyncio.sleep(response_time)
  return f"访问{url}, 已得到返回结果"

async def run_task():
  """收集子任务"""
  task = visit_url('http://wangzhen.com', 2)
  task_2 = visit_url('http://another', 3)
  await asyncio.run(task)
  await asyncio.run(task_2)
asyncio.run(run_task())
print(f"消耗时间:{time.perf_counter() - start_time}")

3、如果是并发编程,这个程序只需要消耗 3s,也就是task2的等待时间。

要想使用并发编程形式,需要把上面的代码改一下。asyncio.gather 会创建 2 个子任务,当出现 await 的时候,程序会在这 2 个子任务之间进行调度。

async def run_task():
  """收集子任务"""
  task = visit_url('http://wangzhen.com', 2)
  task_2 = visit_url('http://another', 3)
  await asynicio.gather(task1, task2)

实例扩展:

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 相关文章推荐
python抓取网页图片并放到指定文件夹
Apr 24 Python
python中将字典转换成其json字符串
Jul 16 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
Python 音频生成器的实现示例
Dec 24 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
简单谈谈Python面向对象的相关知识
Jun 28 Python
python 制作本地应用搜索工具
Feb 27 #Python
如何用Python进行时间序列分解和预测
Mar 01 #Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 #Python
python FTP编程基础入门
Feb 27 #Python
python SOCKET编程基础入门
Feb 27 #Python
python 对xml解析的示例
Feb 27 #Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 #Python
You might like
常用星际术语索引(新手指南)
2020/03/04 星际争霸
PHP insert语法详解
2008/06/07 PHP
PHP 字符串 小常识
2009/06/05 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
浅谈Python type的使用
2019/11/19 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
大学生在校学习的自我评价
2014/02/18 职场文书
愚人节活动策划方案
2014/03/11 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
公关活动策划方案
2014/05/25 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL