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中处理字符串之islower()方法的使用简介
May 19 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
window下eclipse安装python插件教程
Apr 24 Python
python实现机器学习之元线性回归
Sep 06 Python
python制作简单五子棋游戏
Jun 18 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
Python中的延迟绑定原理详解
Oct 11 Python
python 错误处理 assert详解
Apr 20 Python
python 如何调用 dubbo 接口
Sep 24 Python
python 数据类型强制转换的总结
Jan 25 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 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
mysql limit查询优化分析
2008/11/12 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
JS原型链怎么理解
2016/06/27 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python抽象类的新写法
2015/06/18 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python用post访问restful服务接口的方法
2018/12/07 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
2014年幼儿园班级工作总结
2014/12/17 职场文书
同事离别感言
2015/08/04 职场文书
2019公司管理制度
2019/04/19 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
Python pygame实现中国象棋单机版源码
2021/06/20 Python
vue实现滑动解锁功能
2022/03/03 Vue.js
go goth封装第三方认证库示例详解
2022/08/14 Golang