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自动化测试工具Splinter简介和使用实例
May 13 Python
Python中关于使用模块的基础知识
May 24 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
python机器学习之神经网络(一)
Dec 20 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
Django中的session用法详解
Mar 09 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
python打包生成so文件的实现
Oct 30 Python
Python类型转换的魔术方法详解
Dec 23 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
Windows下的PHP5.0详解
2006/11/18 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
TensorFlow Session会话控制&Variable变量详解
2018/07/30 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
详解python对象之间的交互
2020/09/29 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
linux面试题参考答案(5)
2014/09/01 面试题
学生实习自我鉴定
2013/10/11 职场文书
班长自荐书范文
2014/02/11 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
员工试用期自我评价
2014/09/18 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
资金申请报告范文
2015/05/14 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫