一:进程池与线程池
提交任务的两种方式:
1、同步调用:提交完一个任务之后,就在原地等待,等任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行
2、异步调用:提交完一个任务之后,不是原地等待,而是直接执行下一行代码,会导致任务是并发执行的,结果future对象会在任务运行完毕后自动传给回调函数
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor import time, random, os def task(name, n): print('%s%s is running' % (name, os.path.getpid())) time.sleep(random.randint(1, 3)) return n ** 2 if __name__ == '__main__': # print(os.cpu_count()) p = ProcessPoolExecutor(4) l = [] for i in range(5): # 同步提交 # res = p.submit(task, '进程pid:', i).result() # print(res) # 异步提交 future=p.submit(task,'进程pid:',i) l.append(future) p.shutdown(wait=True) # 关闭进程池的入口,并且在原地等待进程池内所有任务运行完毕 for future in l: print(future.result) print('主')