使用 --multiprocessing-fork 了解当前进程是否是多处理池的一部分

问题描述 投票:0回答:1

我需要找到一种方法让 python 进程确定它是否作为多处理池的一部分启动。

我正在使用

dask
来并行计算,使用
dask.distributed.LocalCluster
。出于用户体验的原因(这用作专门科学任务的库的一部分),我希望 dask 集群设置发生在用户可以导入的模块中。

这意味着我不能使用通常的防护:

import dask.distributed as dd

if __name__=='__main__':
    dd.LocalCluster()

防止子进程启动自己的集群,因为我需要从本身导入的模块中启动集群。

通过深入研究

psutil
方法,我发现子进程是使用
--multiprocessing-fork
命令行选项调用的,并且它们运行
multiprocessing.spawn.spawn_main
方法。我正在考虑检查
--multiprocessing-fork
标志是否存在,以了解当前进程是否是池的一部分。

这是正确的做法吗?有更好的办法吗?我找不到任何关于 multiprocessing.spawn.spawn_main 方法的明显文档。

非常感谢!

python multiprocessing dask dask-distributed
1个回答
0
投票

我能想到的最简单的事情就是查看

distributed.worker.Worker._instances
是否有任何条目。工作子进程应该始终有这个。这本质上就是
distributed.get_worker()
所做的,如果不在工作线程上运行,则会引发 ValueError。

© www.soinside.com 2019 - 2024. All rights reserved.