有界进程和线程池执行器
bounded-pool-executor的Python项目详细描述
有界进程和线程池执行器
来自concurrent.futures的ProcessPoolExecutor&;ThreadPoolExecutor的有界信号量
安装
pip install bounded-pool-executor
主要问题是什么?
如果使用标准模块“concurrent.futures”,并希望同时处理数百万个数据,则工作队列将占用所有可用内存。
如果脚本在弱vps上运行,这将导致内存泄漏。
boundedprocesspoolexecutor与processpoolexecutor的比较
boundedprocesspoolexecutor
boundedprocesspoolexecutor仅当另一个工作进程完成其工作时,才会将新工作进程放入队列。
frombounded_pool_executorimportBoundedProcessPoolExecutorfromtimeimportsleepfromrandomimportrandintdefdo_job(num):sleep_sec=randint(1,10)print('value: %d, sleep: %d sec.'%(num,sleep_sec))sleep(sleep_sec)withBoundedProcessPoolExecutor(max_workers=5)asworker:fornuminrange(10000):print('#%d Worker initialization'%num)worker.submit(do_job,num)
结果:
经典的concurrent.futures.processpoolexecutor
processpoolexecutor将所有工作进程插入队列,并希望在释放新工作进程时执行任务,具体取决于max_workers
的值。
importconcurrent.futuresfromtimeimportsleepfromrandomimportrandintdefdo_job(num):sleep_sec=randint(1,3)print('value: %d, sleep: %d sec.'%(num,sleep_sec))sleep(sleep_sec)withconcurrent.futures.ProcessPoolExecutor(max_workers=5)asworker:fornuminrange(100000):print('#%d Worker initialization'%num)worker.submit(do_job,num)