gpt4 book ai didi

python - 工作池数据结构

转载 作者:行者123 更新时间:2023-11-28 17:02:56 24 4
gpt4 key购买 nike

我想知道多处理模块中是否有一个本地实现允许我将正在运行的进程存储在基于列表的结构中,并且每当进程完成执行时它会自动从列表中删除。

在代码中它看起来像这样:

from multiprocessing import process

pool = [] # This data structure needs to prune non-running processes

class A(Process):
def run():
pass

for i in range(0, 10):
worker = A().start()
pool.append(worker)


# So if I want to iterate the pool now, It should only contain the alive processes

另一种管理方法是保留字典:

pool = {
processId: processObject
}

然后使用 psutil 获取事件进程 ID:

current_process = psutil.Process()
children = current_process.children(recursive=False)

但是,一旦进程终止,字典中对象的大小是多少?

最佳答案

我不认为这种假设的 self 更新结构是个好主意,对于相同的 reason你不应该在迭代列表时修改它。当您遍历池时,进程可能会被删除。

要安全地对其进行迭代,您需要一个快照,这会使这种结构的全部工作变得毫无意义。当你需要更新你的池列表时,你最好明确地这样做,例如:

pool[:] = [p for p in pool if p.is_alive()] # p 是你的进程

或者如果您想要所有进程范围内的事件子进程,而不仅仅是您的自定义池中的子进程:

[p for p in multiprocessing.active_children()]

您当然可以将它放在函数或方法中的某处,并在需要实际池列表时调用它。进程具有 pid 属性,因此您不需要 psutil 来获取进程 ID。

关于python - 工作池数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53207826/

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