Python进程间通信与进程池多任务处理详解

凌晨两点半
凌晨两点半
发布时间:2026-10-13 | 6人浏览过
原创

本文详解Python中利用队列实现进程间数据传递的方法,并深入解析进程池(Pool)在管理大量任务时的优势。通过具体代码示例,展示如何创建进程、使用队列同步数据,以及如何配置进程池以优化系统资源调度,提升程序并发执行效率。

本文介绍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()

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函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》。

希望本文所述内容能对读者的Python程序设计有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表