一下代码使用官方进程池和线程池测试,运行10万次函数时间。
import time from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor import nb_log def f(x): pass if x%1000 == 0: print(x) if __name__ == '__main__': pool = ProcessPoolExecutor(10) pool = ThreadPoolExecutor(10) t1 = time.time() for i in range(100000): pool.submit(f, i) pool.shutdown() print(time.time() - t1)
进程池消耗240秒,线程池消耗4秒。
多进程光是主进程submit任务都要消耗大量cpu。每秒执行任意函数不可能突破1000次。
进程池不适合快速频繁sumit,适合直接启动多个进程,每个进程从redis拉取任务,这样的10进程性能暴击ProcessPoolExecutor。