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 Web框架Flask中使用新浪SAE云存储实例
Feb 08 Python
python 的列表遍历删除实现代码
Apr 12 Python
Python中进程和线程的区别详解
Oct 29 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
Python实现的端口扫描功能示例
Apr 08 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
记录Python脚本的运行日志的方法
Jun 05 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
Python爬取某拍短视频
Jun 11 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
2016年国陪研修感言
2015/11/18 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
Oracle用户管理及赋权
2022/04/24 Oracle