python实现通过队列完成进程间的多任务功能示例


Posted in Python onOctober 28, 2019

本文实例讲述了python实现通过队列完成进程间的多任务功能。分享给大家供大家参考,具体如下:

1.通过队列完成进程间的多任务

import multiprocessing


def download_data(q):
  """下载数据"""
  # 模拟从网上下载数据
  data = [11, 22, 33, 44]

  # 向队列中写入数据
  for temp in data:
    q.put(temp)
  print("----数据下载完成并且已存入队列----")


def analysis_data(q):
  """数据处理"""
  waitting_analysis_data = list()
  # 从队列中获取数据
  while True:
    data = q.get()
    waitting_analysis_data.append(data)
    if q.empty():
      break
  print(waitting_analysis_data)


def main():
  # 1.创建一个队列
  q = multiprocessing.Queue()
  q1 = multiprocessing.Process(target=download_data, args=(q,))
  q2 = multiprocessing.Process(target=analysis_data, args=(q,))
  q1.start()
  q2.start()


if __name__ == '__main__':
  main()

python实现通过队列完成进程间的多任务功能示例

2.进程池pool

在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程也需要消耗时间。第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。因此我们不能无限制的根据任务开启或者结束进程。那么我们要怎么做呢?

在这里,要给大家介绍一个进程池的概念,定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务,等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务。如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。也就是说,池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行。这样不会增加操作系统的调度难度,还节省了开闭进程的时间,也一定程度上能够实现并发效果。

案例:

from multiprocessing import Pool
import os, time, random


def worker(msg):
  t_start = time.time()
  print("进程%s开始执行,进程号为%d" % (msg, os.getpid()))
  # random.random()随机生成0-1之间的浮点数
  time.sleep(random.random()*2)
  t_stop = time.time()
  print("进程",msg,"执行完成,耗时%0.2f" % (t_stop-t_start))


def main():
  # 定义一个进程池,最大进程数为3
  po = Pool(3)
  for i in range(10):
    # Pool().apply_async(要调用的目标,(传递给目标的参数元组,))
    # 每次循环将会用空闲出来的子进程去调用目标
    po.apply_async(worker,(i,))

  print("----start----")
  # 关闭进程池,关闭后po不再接受新的请求
  po.close()
# 等待po中所有子进程执行完成,必须放在close语句之后
  po.join()

  print("----end----")


if __name__ == '__main__':
  main()

python实现通过队列完成进程间的多任务功能示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python用来获得图片exif信息的库实例分析
Mar 16 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
python opencv实现图像边缘检测
Apr 29 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
Python AutoCAD 系统设置的实现方法
Apr 01 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 #Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 #Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 #Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 #Python
Python SELENIUM上传文件或图片实现过程
Oct 28 #Python
PYTHON实现SIGN签名的过程解析
Oct 28 #Python
Python爬虫使用代理IP的实现
Oct 27 #Python
You might like
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
PHP数组函数知识汇总
2016/05/12 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
HTML5附件拖拽上传drop & google.gears实现代码
2011/04/28 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
pygame实现非图片按钮效果
2019/10/29 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
护理专业应届毕业生推荐信
2013/11/15 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
MySQL索引是啥?不懂就问
2021/07/21 MySQL