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中关于Sequence切片的下标问题详解
Jun 15 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
python性能测量工具cProfile使用解析
Sep 26 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
python logging.info在终端没输出的解决
May 12 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
Python爬虫之爬取某文库文档数据
Apr 21 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中动态修改ini配置
2014/10/14 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
JS与C#编码解码
2013/12/03 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
python3中sys.argv的实例用法
2020/04/24 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
草莓网官网:StrawberryNET
2019/08/21 全球购物
个人简历自荐信
2013/12/05 职场文书
入学生会自荐书范文
2014/02/05 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
民生工作实施方案
2014/05/31 职场文书
园林系毕业生求职信
2014/06/23 职场文书
教师暑期培训感言
2014/08/15 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle