原因:并行进程和并发进程的区别
# coding=utf-8
import time
import logging
from multiprocessing import Pool
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [*] %(processName)s %(message)s"
)
def func (p):
time.sleep(0.5)
return p * p
if __name__ == '__main__':
start = time.time()
logging.info("-----main before")
pool = Pool(5)
for i in range(100):
# apply是阻塞式的(意思就是等待当前子进程执行完毕后,在执行下一个进程。)
# pool.apply(func, args=(i,)) # 50.457908391952515 s
# 异步非阻塞式的(不用等待当前进程执行完毕,随时根据系统调度来进行进程切换。)
pool.apply_async(func, args=(i,)) # 10.440507411956787 s
pool.close()
pool.join()
logging.info(f"-----main after {time.time()-start} s")