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进阶教程之词典、字典、dict
Aug 29 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
python3实现域名查询和whois查询功能
Jun 21 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
python实现图片上添加图片
Nov 26 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
python中wx模块的具体使用方法
May 15 Python
Python函数对象与闭包函数
Apr 13 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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
用PHP实现的随机广告显示代码
2007/06/14 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
微信小程序实现天气预报功能
2018/07/18 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Python enumerate遍历数组示例应用
2008/09/06 Python
python制作最美应用的爬虫
2015/10/28 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
销售提升方案
2014/06/07 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
实习生矿工检讨书
2014/10/13 职场文书
2015年教师工作总结范文
2015/03/31 职场文书