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和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
详解Python迭代和迭代器
Mar 28 Python
Python实现KNN邻近算法
Jan 28 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
Python实现区域填充的示例代码
Feb 03 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
怎么用Python识别手势数字
Jun 07 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
实用函数10
2007/11/08 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
python实现手机通讯录搜索功能
2018/02/22 Python
python中字符串的操作方法大全
2018/06/03 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
python绘制趋势图的示例
2020/09/17 Python
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
建筑专业毕业生自荐信
2014/05/25 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
2014年销售部工作总结
2014/12/01 职场文书
大学生实习介绍信
2015/05/05 职场文书
运动会5000米加油稿
2015/07/21 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python