meylovezn 2020-05-30
""" 非阻塞模式:当进程池有空闲,就将任务放入,它会继续执行主进程 """ import os import time from multiprocessing import Pool from random import random container = [] def task(name): print("进行任务{} 进程ID:{}".format(name, os.getpid())) start = time.time() # random() 的值是0到1之间,这里就表示休眠 0到2秒 time.sleep(random() * 2) end = time.time() return "完成任务:{} 用时:{} 进程ID:{}".format(name, (end - start), os.getpid()) def callback_func(n): """将进程返回的内容n,放进这个函数内运行""" container.append(n) # 添加返回内容到container,这里也可以对返回的函数进行其它的处理 if __name__ == ‘__main__‘: pool = Pool(5) # 创建一个进程池,里面放5个进程 tasks = ["任务1", "任务2", "任务3", "任务4", "任务5", "任务6", "任务7"] for t in tasks: # apply_async 非阻塞模式,只要存在没有使用的进程,就将任务放进去 pool.apply_async(task, args=(t,), callback=callback_func) pool.close() pool.join() # 将进程池插入到这里,只要当它里面的任务全部都执行完,才继续 for c in container: print(c) print("over")