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中的迭代器与生成器高级用法解析
Jun 28 Python
Python selenium如何设置等待时间
Sep 15 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Python参数类型以及常见的坑详解
Jul 08 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
Nov 20 Python
使用 Python 遍历目录树的方法
Feb 29 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
PHP反射实际应用示例
2019/04/03 PHP
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
Python实现文件按照日期命名的方法
2015/07/09 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
印度网上药店:1mg
2017/10/13 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
追悼会上的答谢词
2014/01/10 职场文书
晚会邀请函范文
2014/01/24 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
法律意见书范文
2015/05/20 职场文书
关于保护环境的建议书
2019/06/24 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python