Python多进程并发(multiprocessing)用法实例详解

 更新时间:2015年06月02日 16:35:34   作者:songguo  
这篇文章主要介绍了Python多进程并发(multiprocessing)用法,实例分析了multiprocessing模块进程操作的相关技巧,需要的朋友可以参考下

本文实例讲述了Python多进程并发(multiprocessing)用法。分享给大家供大家参考。具体分析如下:

由于Python设计的限制(我说的是咱们常用的CPython)。最多只能用满1个CPU核心。
Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。

1、新建单一进程

如果我们新建少量进程,可以如下:

import multiprocessing
import time
def func(msg):
  for i in xrange(3):
    print msg
    time.sleep(1)
if __name__ == "__main__":
  p = multiprocessing.Process(target=func, args=("hello", ))
  p.start()
  p.join()
  print "Sub-process done."

2、使用进程池

是的,你没有看错,不是线程池。它可以让你跑满多核CPU,而且使用方法非常简单。

注意要用apply_async,如果落下async,就变成阻塞版本了。

processes=4是最多并发进程数量。

import multiprocessing
import time
def func(msg):
  for i in xrange(3):
    print msg
    time.sleep(1)
if __name__ == "__main__":
  pool = multiprocessing.Pool(processes=4)
  for i in xrange(10):
    msg = "hello %d" %(i)
    pool.apply_async(func, (msg, ))
  pool.close()
  pool.join()
  print "Sub-process(es) done."

3、使用Pool,并需要关注结果

更多的时候,我们不仅需要多进程执行,还需要关注每个进程的执行结果,如下:

import multiprocessing
import time
def func(msg):
  for i in xrange(3):
    print msg
    time.sleep(1)
  return "done " + msg
if __name__ == "__main__":
  pool = multiprocessing.Pool(processes=4)
  result = []
  for i in xrange(10):
    msg = "hello %d" %(i)
    result.append(pool.apply_async(func, (msg, )))
  pool.close()
  pool.join()
  for res in result:
    print res.get()
  print "Sub-process(es) done."

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

相关文章

  • PyTorch模型调试与故障排除指南

    PyTorch模型调试与故障排除指南

    在当代深度学习领域,PyTorch 已成为开发和训练神经网络的主要框架之一,然而随着模型复杂度的增加和数据规模的扩大,开发者常常面临各种调试和优化挑战,本文旨在为 PyTorch 开发者提供一个全面的调试指南,涵盖从基础概念到高级技术的广泛内容,需要的朋友可以参考下
    2024-09-09
  • Python queue模块的用法

    Python queue模块的用法

    本文主要介绍了Python queue模块的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Python 元类使用说明

    Python 元类使用说明

    元类就是类的模板——太形象了了呀,霍霍。
    2009-12-12
  • python打印直角三角形与等腰三角形实例代码

    python打印直角三角形与等腰三角形实例代码

    这篇文章主要给大家介绍了关于python打印直角三角形与等腰三角形的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • python爬虫获取百度首页内容教学

    python爬虫获取百度首页内容教学

    在本篇内容里小编给大家分享了关于python爬虫获取百度首页内容教学,需要的朋友们可以跟着学习下。
    2018-12-12
  • python如何判断文件存在方式

    python如何判断文件存在方式

    这篇文章主要介绍了python判断文件存在方式,判断文件是否存在在实际应用中用的非常多,下面我们来归纳一下检查文件、文件夹是否存在的各种操作,需要的朋友可以参考下
    2022-09-09
  • python使用请求头部headers处理403错误

    python使用请求头部headers处理403错误

    有时候请求一个网页的时候,无论是GET请求还是POST请求都访问不了,并出现403错误,这是因为这些网页为了防止恶意采集信息,使用了反爬机制,本文给大家介绍了python如何使用请求头部headers处理403错误,需要的朋友可以参考下
    2024-03-03
  • python基于双向链表实现LFU算法

    python基于双向链表实现LFU算法

    这篇文章主要为大家详细介绍了python基于双向链表实现LFU算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • matplotlib实现热成像图colorbar和极坐标图的方法

    matplotlib实现热成像图colorbar和极坐标图的方法

    今天小编就为大家分享一篇matplotlib实现热成像图colorbar和极坐标图的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 浅谈Python traceback的优雅处理

    浅谈Python traceback的优雅处理

    这篇文章主要介绍了浅谈Python traceback的优雅处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论