运行工作流程的守护进程?

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

如今,必须同时在工作流程中运行守护程序。例如,深度学习作业需要参数服务器和超参数优化服务器。我在Snakemake中看不到任何明显的受支持方法。

我可以将代码放入Snakefile中,该文件在工作流启动时启动守护程序,并在退出时终止它。我还可以将守护程序定义为规则,该规则生成daemon.pid文件,并且需要该守护程序的规则取决于该文件。

但这两个都不是理想的,因为它们确实没有在工作流程中表达守护程序的意图。最重要的是,虽然.pid文件方法可能仅根据需要启动守护程序,但是当不再需要它时,它不会将其关闭。

人们如何在工作流程中处理此问题?

理想情况下,将为“守护程序”单独声明,它将在依赖于守护程序的第一个规则开始之前启动,并且在不再需要任何规则时将其关闭。其他工作流程系统采用这种方法。 Snakemake中有类似的东西吗?

snakemake
1个回答
0
投票

当然,我从未使用过守护程序,据我了解,我认为您的情况没有那么复杂。

一个选项可能是使用onstart/onsuccess/onerror处理程序。当然,这将在管道的开头立即启动守护程序,而在结束时将其停止,这可能是不希望的。

或者,使需要守护程序的第一条规则取决于daemon.start。然后,要求守护程序的最后一条规则应触摸daemon.end文件,该文件触发守护程序的停止。类似于:

rule all:
    input:
        'foo.txt',
        'daemon.end',

rule start_daemon:
    output:
        touch('daemon.start'),
    shell:
        r"""
        start-daemon
        """

rule do_stuff_with_daemon:
    input:
        'daemon.start',
    output:
        'foo.txt',
    shell:
        r"""
        do stuff with daemon
        """

rule stop_daemon:
    input:
        'foo.txt',
    output:
        touch('daemon.end'),
    shell:
        r"""
        stop-daemon
        """
© www.soinside.com 2019 - 2024. All rights reserved.