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 相关文章推荐
Django框架中render_to_response()函数的使用方法
Jul 16 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
python中ASCII码和字符的转换方法
Jul 09 Python
用于业余项目的8个优秀Python库
Sep 21 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
如何基于Python实现数字类型转换
Feb 07 Python
Python描述符descriptor使用原理解析
Mar 21 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
利用Pycharm连接服务器的全过程记录
Jul 01 Python
python中Matplotlib绘制直线的实例代码
Jul 04 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP加密解密实例分析
2015/12/25 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
Vue精简版风格概述
2018/01/30 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
Angular4 ElementRef的应用
2018/02/26 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
小程序实现多列选择器
2019/02/15 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
python基础知识小结之集合
2015/11/25 Python
Python中属性和描述符的正确使用
2016/08/23 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
2015年社区关工委工作总结
2015/04/03 职场文书
监护人证明
2015/06/19 职场文书
个人欠条范本
2015/07/03 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
浅谈Python中对象是如何被调用的
2022/04/06 Python
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript