当要起多个进程时,有时候电脑会太卡,这时候就建议直接起一个进程池,一般线程池的个数建议比CPU个数或者比cpu多一个
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def thread(): print('子线程') if __name__ == '__main__': t = ThreadPoolExecutor(4) t.submit(thread)
上图是如何使用concurrent.futures开启一个线程池
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def thread(): print('子进程') if __name__ == '__main__': t = ProcessPoolExecutor(4) t.submit(thread)
上图则是如何使用concurrent.futures开启一个进程池
from multiprocessing import Pool def func(): print('子进程') if __name__ == '__main__': p = Pool(4) p.apply_async(func,) p.close() p.join() print('这是主进程')
上图是一个使用进程里面的模块pool创建的一个进程池,如果在主进程代码里面不加close和join,子进程里面的代码将不会执行,因为这时候系统感知到了你的主进程中的代码已经结束了,所以就不等子进程结束就直接结束代码,所以此时必须要加一个join,让主进程等待子进程代码完全结束在结束