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 相关文章推荐
web.py中调用文件夹内模板的方法
Aug 26 Python
python实现在sqlite动态创建表的方法
May 08 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
python批量修改交换机密码的示例
Sep 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和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
python 中的int()函数怎么用
2017/10/17 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python远程邮件控制电脑升级版
2019/05/23 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
python将字母转化为数字实例方法
2019/10/04 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
教师的实习鉴定
2013/12/15 职场文书
转让协议书
2015/01/27 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
使用springMVC所需要的pom配置
2021/09/15 Java/Android