python、多处理和 dmtcp:检查池中的一个进程?

python, multiprocessing and dmtcp: checkpointing one process in Pool?

是否可以使用 python 的 dmtcp 集成来检查并行执行中的子进程?

我的情况如下:我有一个 multiprocessing.Pool 有几个工人接收异步作业(使用 apply_async)。某些 作业需要所有资源(cpu 内核和内存)。当这些作业之一被接受时,我想检查所有挂起的进程,将它们踢出执行,启动大作业并最终恢复检查点进程。

如果您使用 dmtcp_launch python ...dmtcp_launch ./myapp.py 启动您的 python 程序,主进程创建的所有子进程都会自动处于检查点控制之下。因此,当您尝试从主进程中检查点计算时,所有其他进程也会被检查点。

我对 multiprocessing.Pool 不太熟悉,无法在这方面做出详细评论,但根据我在一分钟内的理解,您不想检查您的主进程(调度程序)。但是,DMTCP 会将检查点作为一个单元重新启动整个计算(包括调度程序)。这是可以接受的吗?如果不是,备选方案是不在 DMTCP 控制下启动调度程序,而是将其修改为仅在检查点控制下启动 child/slave 进程。我不确定您是否可以在您的应用程序中执行此操作。