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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
selenium+python设置爬虫代理IP的方法
Nov 29 Python
Python字符串的全排列算法实例详解
Jan 07 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
python两种注释用法的示例
Oct 09 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
python如何读取.mtx文件
Apr 22 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更快的提供文件下载的代码
2012/06/13 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
javascript基本语法分析说明
2008/06/15 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
JS前端加密算法示例
2016/12/22 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
python调用新浪微博API项目实践
2014/07/28 Python
Python读写ini文件的方法
2015/05/28 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
UNIX文件系统常用命令
2012/05/25 面试题
药剂学专业应届生自荐信
2013/09/29 职场文书
思想汇报范文
2013/11/04 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
水电工岗位职责
2014/02/12 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
关于学习的演讲稿
2014/05/10 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
初中毕业生自我评价
2015/03/02 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
如何用python插入独创性声明
2021/03/31 Python