我有基本的 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)
非常感谢一个简单的例子,它为启动器子类添加了一个额外的选项。