gpt4 book ai didi

python - python多处理中的动态工作池管理

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:41 24 4
gpt4 key购买 nike

我想做的是监控系统资源使用情况并动态增加/减少池中的工作人员数量。

我有一个 24 核节点和 48GB 内存,我所做的是读取一个 4GB 数据文件,我需要过滤它。该系统也被其他人使用,因此可用内存随时间变化。由于 4GB 输入数据被复制到所有工作人员(我还没有找到一种方法来避免这种情况,因为我只需要在工作人员中以只读方式使用它,欢迎推荐,它是 dicts() 的 dict() 和列表) 这意味着我不能产生 24 个 worker ,因为我会立即耗尽内存。所以我想做的是用 6 个安全数量的 worker 开始这个过程,然后观察内存使用情况并向池中产生额外的 worker ,如果内存使用率变高,减少 worker 的数量(即允许一些人完成,但不再为这些 worker 产生新的任务)。这样我就可以最大限度地利用节点,同时保持 RAM 使用率 <95% 说。

之所以如此高效,是因为即使有 6-12 个并行工作器,整个代码也能运行几个小时,所以如果我能在一段时间内将工作器数量增加 20-30%,它会减少总执行量时间。

现在我已经使用了 Pool.map() 和 Pool.apply_async() 方法来将任务发送到池中,所以我没有直接偏好一种方法是否比另一种方法更好。

提前感谢您的建议。

最佳答案

多处理模块为多个进程提供了一种方式share a dict :

manager = mp.Manager()
d = manager.dict()

也许通过使用共享字典,您可以生成 24 个 worker 而仍然使用更少的内存。当一个 worker 访问或改变字典时,如果其他 worker 也试图访问或改变字典,他们将被阻止,但如果这不是主要瓶颈,那么能够使用 24 个 worker 可以大大减少您的执行时间。

关于python - python多处理中的动态工作池管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com