Python Pebble ProcessPool如何设置max_tasks

时间:2019-01-30 12:12:41

标签: python parallel-processing pebble

Pebble的进程池采用max_workers和max_tasks的参数。

https://pythonhosted.org/Pebble/#pools

对max_tasks的描述有点不清楚:

“如果max_tasks是大于零的数字,则在执行相同数量的任务后,每个工作程序将重新启动。”

我的问题是:

  • 如果它不大于零怎么办?那么它的表现如何?

  • 重新启动工作程序是什么意思?假设max_tasks是5。那么每个进程将执行5次迭代,然后被杀死,并重新启动一个新进程吗?这样做有什么好处?

  • 我知道其他库允许您根据是否期望每个任务花费相似的时间来自定义池映射。这里有关系吗?

  • 通常,设置max_tasks有哪些准则?

我正在运行一个函数,该函数需要在长度为+ = 160 000的列表的每个元素上运行。它是完全可并行化的,并且我的服务器具有8个内核。每个函数调用将花费大约相同的时间来完成,最多比平均时间长3倍。

谢谢。

1 个答案:

答案 0 :(得分:0)

max_task参数类似于maxtaskperchild中的multiprocessing.Pool。 Python 2 related documentation解释了此参数的用途。

  

池中的工作进程通常在池的工作队列的整个期间内都处于活动状态。在其他系统(例如Apache,mod_wsgi等)中发现的释放工人资源的常见模式是允许池中的工人在退出,清理和产生新进程之前仅完成一定数量的工作。取代旧的。池的maxtasksperchild参数向最终用户公开了此功能。

换句话说,如果要限制进程可以维持的资源增长量,请使用max_task。这在处理正在泄漏内存或文件描述符的库的情况下很有用。另一个用例是限制进程中发生的内存碎片浪费的内存。