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 import自定义模块方法
Feb 12 Python
Python中用Decorator来简化元编程的教程
Apr 13 Python
python中enumerate函数用法实例分析
May 20 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
May 10 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
python批量解压zip文件的方法
Aug 20 Python
Python实现密码薄文件读写操作
Dec 16 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 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错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php异常处理使用示例
2014/02/25 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
js 异步处理进度条
2010/04/01 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
react的hooks的用法详解
2020/10/12 Javascript
python实现二叉查找树实例代码
2018/02/08 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
给医务人员表扬信
2014/01/12 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
预备党员个人总结
2015/02/14 职场文书
2015年技术员工作总结
2015/04/10 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏