Python多进程--multiprocessing

  1. 简介

multiprocessing包是python中用来提供多进程管理的包,能完全利用电脑的多核功能。在Unix与Windows中都能正常使用。

  1. Process模块

  • Process模块用来生产进程,通过调用start()启动进程。Process与threading.Thread的API一致。

  • class multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={})
    – 通过指定keyword参数来调用构造函数
    – group 仅仅是为了保持与threading.Thread的接口一致而存在,不需要设置(默认为None)
    – target 进程的函数。
    – name 是进程的名字。默认的名字为Process-N1:N2:……
    – args 一个tuple,值为target函数的参数,默认为无参数。

  • run() 如果在创建Process时不指定target,那么执行时没有任何效果。因为默认的run方法是判断如果不指定target,那就什么都不做

  • start() 激活传递给target的进程函数。

  • join([timeout]) 阻塞调用join的当前线程,直到join进程执行完毕或者timeout

    • 如果timeout为None,则无超时
    • 一个进程可以join好多次
    • 一个进程不能join自己,否则会造成死锁。(阻塞自己直到自己运行完毕)
    • 如果进程start之前调用join会导致错误
  • pid 返回进程的ID,进程生成之前,pid为None
    .

  • 一个简单的利用Process产生进程的程序如下:

from multiprocessing import Process
def f(num):
    print num
if __name__ == '__main__':
    p = Process(target=f, args=('susan',))
    p.start()
    p.join()
  • 例子解释run函数的用法
#创建2个进程
p1 = Process() 
p2 = Process(target=f2)
p1.run = f1 #p1创建时,没有传递函数给target,启动时不会有任何效果。此处为其执行函数
p1.start()
p2.start()
p1.join() #阻塞当前线程,直到f1执行完毕,再执行p2.join()
p2.join() #阻塞当前线程,直到f2执行完毕,再执行print ’end‘
print ’end‘
  • 例子解释join函数的用法
    1. 正常用法
#创建2个进程
p1 = Process(target=f1) 
p2 = Process(target=f2)
p1.start()
p2.start()
p1.join() #阻塞当前线程,直到f1执行完毕,再执行p2.join()
p2.join() #阻塞当前线程,直到f2执行完毕,再执行print ’end‘
print ’end‘
2. 不使用join()
#创建2个进程
p1 = Process(target=f1) 
p2 = Process(target=f2)
p1.start()
p2.start()
#p1.join() #启动完p2.start()后,直接运行print 'end',再继续执行完f1和f2
#p2.join() 
print ’end‘
3. start()和join()交替使用
#创建2个进程
p1 = Process(target=f1) 
p2 = Process(target=f2)
p1.start()
p1.join() #阻塞当前线程,执行完f1后,再执行p2.start()启动f2
p2.start()
p2.join() #阻塞当前线程,执行完f2后,再执行print 'end'
print ’end‘
4. 两个进程只使用一个join()
#创建2个进程
p1 = Process(target=f1) 
p2 = Process(target=f2)
p1.start()
p2.start()
p1.join() #阻塞当前线程,执行完f1后,直接执行print ’end‘,再继续f2执行
#p2.join()
print ’end‘
    原文作者:aialin
    原文地址: https://www.jianshu.com/p/3d4cfbacf23a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞