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发布模块的步骤分享
Feb 21 Python
人机交互程序 python实现人机对话
Nov 14 Python
python删除本地夹里重复文件的方法
Nov 19 Python
Python爬虫抓取技术的一些经验
Jul 12 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
一行python实现树形结构的方法
Aug 09 Python
Python测试模块doctest使用解析
Aug 10 Python
python使用PIL剪切和拼接图片
Mar 23 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
详解python日志输出使用配置文件格式
Feb 10 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
Python中seaborn库之countplot的数据可视化使用
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
PHP制作万年历
2015/01/07 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
在Python中marshal对象序列化的相关知识
2015/07/01 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
中专毕业生自我鉴定
2014/02/02 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
行政前台岗位职责
2015/04/16 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers