0

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

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

max_tasks 的描述有点不清楚:

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

我的问题是:

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

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

  • 我知道其他库允许您自定义池映射,具体取决于每个任务是否需要相似的时间才能完成。这与这里有关吗?

  • 一般来说,设置 max_tasks 有哪些指导方针?

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

谢谢。

4

1 回答 1

0

max_task参数类似于maxtaskperchildin multiprocessing.Pool。Python 2相关文档解释了此类参数的用途。

池中的工作进程通常在池的工作队列的整个持续时间内存在。在其他系统(如 Apache、mod_wsgi 等)中发现的一种常见模式是释放工作人员持有的资源,即允许池中的工作人员在退出、清理和产生新进程之前只完成一定数量的工作替换旧的。池的 maxtasksperchild 参数向最终用户公开了这种能力。

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

于 2019-03-23T14:34:38.793 回答