# multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。
# 进程池 (Process Pool)可以创建多个进程。
# apply_async(func,args) 从进程池中取出一个进程执行func,args为func的参数。它将返回一个AsyncResult的对象,你可以对该对象调用get()方法以获得结果。
# close() 进程池不再创建新的进程
# join() wait进程池中的全部进程。必须对Pool先调用close()方法才能join。
# 阻塞当前进程,直到调用join方法的那个进程执行完,再继续执行当前进程。
from multiprocessing import Pool
import os, time
def long_time_task(name):
print ('Run task %s (%s)...' % (name, os.getpid()))
start = time.time()
time.sleep(3)
end = time.time()
print ('Task %s runs %0.2f seconds.' % (name, (end - start)))
if __name__=='__main__':
print ('Parent process %s.' % os.getpid())
p = Pool()
for i in range(4):
p.apply_async(long_time_task, args=(i,))
print ('Waiting for all subprocesses done...')
p.close()
p.join()
print ('All subprocesses done.')