多进程包multiprocessing的使用


多进程学习

Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。

新建单一进程

如果我们新建少量进程,可以如下:
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.”

使用进程池

是的,你没有看错,不是线程池。它可以让你跑满多核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.”

使用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.”


文章作者: 祈安
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 祈安 !
评论
  目录