阻塞式特点:
添加一个任务,就执行一个任务,如果一个任务不结束,下一个任务就不会被添加进来
import os
from multiprocessing import Process, Pool
from random import random
import time
def task(task_name):
print('开始做任务', task_name)
start = time.time()
# 使用sleep
time.sleep(random()*2)
end = time.time()
print('完成任务:{}!用时:{},进程id:{}'.format(task_name, (end-start), os.getpid()))
if __name__ == '__main__':
pool = Pool(5)
tasks = ['听音乐', '吃饭', '洗衣服', '打游戏', '散步', '看孩子', '做饭']
for task1 in tasks:
pool.apply(task, args=(task1,)) # 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
pool.close()
pool.join() # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
print('over!')

总结:
进程池:
pool = Pool(processes=n) 创建进程池对象
pool.apply() 阻塞的
pool.apply_async() 非阻塞的
pool.close()
pool.join() 让主进程让步