实例分析Python多进程池 multiprocessing Pool的使用

  • 时间:
  • 3859人关注

这篇文章主要介绍了Python多进程池 multiprocessing Pool用法,结合实例形式分析了多进程池 multiprocessing Pool相关概念、原理及简单使用技巧,需要的朋友可以参考下,另外这篇文章主要知识点是关于Python、多进程池、multiprocessing、Pool、Python的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

本文实例讲述了Python多进程池 multiprocessing Pool用法。分享给大家供大家参考,具体如下:

1. 背景

由于需要写python程序, 定时、大量发送htttp请求,并对结果进行处理。

参考其他代码有进程池,记录一下。

2. 多进程 vs 多线程

  • c++程序中,单个模块通常是单进程,会启动几十、上百个线程,充分发挥机器性能。(目前c++11有了std::thread编程多线程很方便,可以参考我之前的博客)
  • shell脚本中,都是多进程后台执行。({ ...} &, 可以参考我之前的博客,实现shell并发处理任务)
  • python脚本有多线程和多进程。由于python全局解锁锁的GIL的存在,一般建议 CPU密集型应该采用多进程充分发挥多核优势,I/O密集型可以采用多线程。

尽管Python完全支持多线程编程, 但是解释器的C语言实现部分在完全并行执行时并不是线程安全的。
实际上,解释器被一个全局解释器锁保护着,它确保任何时候都只有一个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多进程fork()函数详解

下一篇:pycharm的Python console不能调试当前程序的解决方案

相关内容

  • Python如何限制输出日志的大小

    这篇文章主要介绍了Python 限制输出日志的大小方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    05-06Python限制日志大小

    阅读更多
  • python实现可视化的MD5、sha256哈希加密小工具

    这篇文章主要介绍了详解python实现可视化的MD5、sha256哈希加密小工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    04-07python MD5、sha256哈希加密

    阅读更多
  • Python gevent协程切换实现方法

    这篇文章主要介绍了Python gevent协程切换实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    04-07Python gevent协程切换

    阅读更多
  • python/golang实现循环链表的代码

    这篇文章主要介绍了python/golang如何实现循环链表,帮助大家更好的理解和学习循环链表的实现方法,感兴趣的朋友可以了解下

    04-07python/golang 循环链表

    阅读更多
  • 2020版Python学习路线图(附学习资料)

    这篇文章主要介绍了Python学习路线图(2020最新版),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    04-07Python学习路线图

    阅读更多
  • Python学习手册

    Python学习手册

    Python新手入门必看之作,位居美亚电脑编程热销第一,《Python编程》姊妹篇遮盖Python3.3和Python2.72个版本号,详尽解读各种各样語言特点,并增加很多实例 这书依据Python权威专家MarkLutz的知名课

    大小:123 MBPython手册

    点击下载
  • Python数据科学指南

    Python数据科学指南

    本书是Python数据分析编程入门,详细介绍了Python在数据科学中的应用,60多个实用的开发技巧,帮你探索Python及其强大的数据科学能力

    大小:62.3 MBPython数据分析

    点击下载
  • Python3爬虫、数据清洗与可视化实战

    Python3爬虫、数据清洗与可视化实战

    这是一套通过实战教初学者学习采集数据、清洗和组织数据进行分析及可视化的Python读物。以Python爬虫技术应用实战为主,适合Python 初学者及高等院校的相关专业学生

    大小:232.8 MBPython3

    点击下载
  • 零基础入门学习Python

    零基础入门学习Python

    Python零基础入门学习-水木书荟 适合学习Python3的入门读者,也适用对编程一无所知,但渴望用编程改变世界的朋友们!本书提倡理解为主,应用为王。因此,只要有可能,小甲鱼(作者)都会

    大小:59.3 MBPython编程

    点击下载
  • Python程序设计与算法基础教程

    Python程序设计与算法基础教程

    大小:107.6 MBPython编程

    点击下载
  • Python3.7从零开始学

    Python3.7从零开始学

    本书专门针对Python新手量身定做,是编者学习和使用Python开发过程中的体会和经验总结,涵盖实际开发中重要的知识点,内容详尽,代码可读性及可操作性强。

    大小:75.8 MBPython3.7

    点击下载
  • 机器学习系统设计:Python语言实现

    机器学习系统设计:Python语言实现

    本书是一本设计高效机器学习系统的详实指南,介绍机器学习系统设计的整个过程,相关的Python库,并在各个知识环节中都给出了Python示例,欢迎下载

    大小:84.5 MBPython

    点击下载

学习笔记