Python multiprocessing Pool多进程池使用详解与示例

Finn
Finn
发布时间:2026-10-13 | 3人浏览过
原创

本文详解Python中multiprocessing.Pool的使用。针对CPU密集型任务,多进程可突破GIL限制利用多核优势。通过示例展示Pool的创建、map方法调用及close与join的正确顺序,实现高效并行处理。

本文详细介绍Python中multiprocessing模块下Pool类的具体用法,旨在为读者提供清晰的参考与实操指导。

1. 背景

开发需求涉及编写Python程序,以定时、批量方式发送HTTP请求,并对返回结果进行后续处理。

鉴于其他代码中使用了进程池技术,此处对此方法进行记录与分享。

2. 多进程 vs 多线程

  • 在C++程序中,单个模块通常采用单进程架构,但会启动数十甚至上百个线程,以充分利用机器性能。(注:C++11已支持std::thread进行多线程编程,便捷性较高,可参考相关博客文章)。
  • 在Shell脚本中,通常采用多进程后台执行的方式。(参考相关博客,了解如何实现Shell并发任务处理)。
  • Python脚本同时支持多线程和多进程。由于Python存在全局解释器锁(GIL),一般建议:CPU密集型任务应采用多进程,以充分发挥多核CPU的优势;而I/O密集型任务则可采用多线程。

尽管Python完全支持多线程编程,但其C语言实现的解释器在完全并行执行时并非线程安全。实际上,解释器受全局解释器锁(GIL)保护,确保同一时刻仅有一个Python线程执行。GIL的主要局限在于,Python的多线程程序无法有效利用多核CPU的优势(例如,一个包含多个线程的计算密集型程序仍会在单个CPU核心上运行)。

3. multiprocessing pool使用例子

对Pool对象调用join()方法将阻塞并等待所有子进程执行完毕。在调用join()之前,必须先调用close(),以停止接收新的Process任务。

#coding=utf-8
import logging
import time
from multiprocessing import Pool
logging.basicConfig(level=logging.INFO, filename='logger.log')
class Point:
  def __init__(self, x = 0, y= 0):
    self.x = x
    self.y = y
  def __str__(self):
    return "(%d, %d)" % (self.x, self.y)
def fun1(point):
  point.x = point.x + 3
  point.y = point.y + 3
  time.sleep(1)
  return point
def fun2(x):
  time.sleep(1)
  logging.info(time.ctime() + ", fun2 input x:" + str(x))
  return x * x
if __name__ == '__main__':
  pool = Pool(4)
  #test1
  mylist = [x for x in range(10)]
  ret = pool.map(fun2, mylist)
  print ret
  #test2
  mydata = [Point(x, y) for x in range(3) for y in range(2)]
  res = pool.map(fun1, mydata)
  for i in res:
    print str(i)
  #end
  pool.close()
  pool.join()
  print "end"

运行结果如下:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] (3, 3) (3, 4) (4, 3) (4, 4) (5, 3) (5, 4) end

4. 参考

Python 多进程 multiprocessing.Pool类详解 Python 多线程和多进程编程总结 Python的全局锁问题

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表