2

我有基本的 PBS Controller 和 EngineSet Launchers 与我的 PBS/torque 集群一起工作。但现在我想通过配置文件和/或命令行传递其他选项,以使用 {} 模板格式化程序语法在 batch_template 文件中呈现。

例如,我想运行:

ipcluster start -n 10 --pmem=10gb

然后在我的模板中:

#PBS -l pmem={pmem}

我想我必须继承 PBSControllerLauncher 和 PBSEngineSetLauncher 类?文档中提到了这一点,但我找不到一个明确的例子来说明如何做到这一点。

简单地从这些类继承并添加pmem = Unicode(...)为类属性不会使 pmem 在模板的上下文中可用write_batch_script

我可以访问配置选项并将其插入到上下文中,如下所示。这段代码有效,但很尴尬,似乎不是正确的方法:

从 IPython.parallel.apps.launcher 导入 PBSControllerLauncher、PBSEngineSetLauncher、BatchClusterAppMixin、ipcontroller_cmd_argv、ipengine_cmd_argv
从 IPython.utils.traitlets 导入(
        任何、整数、CFloat、列表、Unicode、字典、实例、HasTraits、CRegExp
        )
进口管道

MyPBSLauncherExtension 类(对象):
    def update_context(self):
        cfg = self.config
        ctx = self.context
        cls = type(self).__name__
        对于 c in ('extra_pbs_directives', 'extra_modules'):
            如果 cfg 中的 cls:
                如果 c 在 cfg[cls] 中:
                    ctx[c] = cfg[cls][c]
                    继续
            如果 c 在 cfg 中:
                ctx[c] = cfg[c]
            别的:
                ctx[c] = getattr(self, c)


类 MyPBSControllerLauncher(PBSControllerLauncher,MyPBSLauncherExtension):
    extra_pbs_directives = Unicode(u'', config=True, help='')
    extra_modules = Unicode(u'', config=True, help='')


    def write_batch_script(self, n):
        self.update_context()
        超级(MyPBSControllerLauncher,自我).write_batch_script(n)

MyPBSEngineSetLauncher 类(PBSEngineSetLauncher,MyPBSLauncherExtension):
    extra_pbs_directives = Unicode(u'', config=True, help='')
    extra_modules = Unicode(u'', config=True, help='')


    def write_batch_script(self, n):
        self.update_context()
        超级(MyPBSEngineSetLauncher,自我).write_batch_script(n)

非常感谢一个简单的例子,它为启动器子类添加了一个额外的选项。

4

0 回答 0