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