import os
import time
import random
from multiprocessing import Pool
def task(name):
print("Run task {0}, {1}".format(name, os.getpid()))
start = time.time()
time.sleep(random.random()*3)
end = time.time()
print("Task {0} runs {1} seconds".format(name, (end - start)))
if __name__ == "__main__":
print("Parent process {0}".format(os.getpid()))
p = Pool() # 进程池默认数量和电脑有关, 4核CPU,就是进程池默认是4
for i in range(5): # 测试的电脑4核CPU,这里起5个子进程,会有一个进程等待其它进程执行完后执行
p.apply_async(task, args=(i,))
print("Waiting for all subprocesses done...")
p.close() # close 后就不能继续添加新的Process了
p.join() # 等待子进程结束后再继续往下运行
print("All subprocesses done")
# Parent process 19271
# Waiting for all subprocesses done...
# Run task 0, 19272
# Run task 1, 19273
# Run task 2, 19274
# Run task 3, 19275
# Task 1 runs 1.0092787742614746 seconds
# Run task 4, 19273
# Task 3 runs 1.3692305088043213 seconds
# Task 0 runs 1.4714231491088867 seconds
# Task 2 runs 1.9193198680877686 seconds
# Task 4 runs 1.993635892868042 seconds
# All subprocesses done