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 11 Python
python构建自定义回调函数详解
Jun 20 Python
Python实现屏幕截图的两种方式
Feb 05 Python
python读写csv文件并增加行列的实例代码
Aug 01 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
树莓派升级python的具体步骤
Jul 05 Python
Python定义一个Actor任务
Jul 29 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
Python利用folium实现地图可视化
May 23 Python
Python Django项目和应用的创建详解
Nov 27 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短域名转换为实际域名函数
2011/01/17 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
Python Socket传输文件示例
2017/01/16 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
对python中list的五种查找方法说明
2020/07/13 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
党的群众路线学习材料
2014/05/16 职场文书
销售类求职信
2014/06/13 职场文书
大学生找工作求职信
2014/07/09 职场文书
幼师个人总结范文
2015/02/28 职场文书
入党转正申请报告
2015/05/15 职场文书
会议新闻稿
2015/07/17 职场文书
二胎满月酒致辞
2015/07/29 职场文书
Fluentd搭建日志收集服务
2022/09/23 Servers