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引用DLL文件的方法
May 11 Python
python任务调度实例分析
May 19 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
有趣的python小程序分享
Dec 05 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
python实现简单的文字识别
Nov 27 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
python树的同构学习笔记
Sep 14 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
Python中tkinter的用户登录管理的实现
Apr 22 Python
Python import模块的缓存问题解决方案
Jun 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
js的with语句使用方法
2007/09/21 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
python查找目录下指定扩展名的文件实例
2015/04/01 Python
python函数局部变量用法实例分析
2015/08/04 Python
python简单实例训练(21~30)
2017/11/15 Python
Python微信公众号开发平台
2018/01/25 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python程序暂停的正常处理方法
2019/11/07 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
远程教育心得体会
2014/01/03 职场文书
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python