阻塞式特点:
添加一个任务,就执行一个任务,如果一个任务不结束,下一个任务就不会被添加进来
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() 让主进程让步