IMerger及ISplitter文档解析 IMerger 类图如下: 文档解析: 1.merger(self,subjobs,sum_outputdir,**option) 合并子作业的输出到sum_outputdir. options(关键字参数)由具体的子类定义 2.validatedMerge(self.job) ISplitter 类图如下: 文档解析: 1.split(self,job) 根据主作业返回子作业列表 主作业不会被更改 具体子类必须实现本方法 修改子作业的确定部分(如特定的属性)。子作业的其他部分都会相同。只有在schema中声明为"splitable"的属性才可修改。如果app handler不能处理被修改的参数,这个限定应用在app对象上就可以避免前后不一致。 当前的实现中,backend的类型也不可更改。 2.validatedSplit(self,job) 调用split()方法执行作业拆分,并使mutability inveriants有效 如果invariants损坏(或者split()中发生异常),则抛出SplittingError异常 ... read more There are comments.
IApplication文档解析 类图如下: 是所有app对象的基类。子类在GPI中给出程序逻辑并从功能上实现配置操作。app配置是作业提交的第一步。 实现配置方法的基本规则: 一般configure()和master_configure()方法会在作业提交的时候调用,所以原则上你 方法文档: 1.master_configure(self) 配置app的共享(主要)方面。 调用一次,splitting情况下也会调用 返回元组(modified_flag, appconfig) -appconfig(或appextra): 结构任意。由特定app运行时handler处理 -modified_flag: 如果configure()时对象self被改变了则为true 如果方法未实现则忽略掉 2.config(self,master_aapconfig) 配置app的特定方面。与方法1有类似语义并且返回元组(modified_flag,appconfig). 具体子类必须实现,否则作业提交(submission)会失败。 参数master_configure是方法1的返回 splitting情况下每个子作业对象调用一次。即有多少子作业就会调用多少次。 无spliting情况下则会调用一次. 从Ganga4.0.x开始,方法1被忽略。 3 ... read more There are comments.
Ganga中文 GangaDoc Ganga文档首页入口 3 实现 这章提供了GANGA中一些重要部分的当前实现细节。 3.1 组件 作业的各个组件以插件类的形式来实现,需用户在配置文件中设为enabled,则会由GANGA在启动时导入。这表示用户仅能看到与其特定工作环境相关的组件。 插件维护十分简单,采用了一组内部接口和一个产生代理类的机制。组件类继承自接口类。每个插件类都定义了一个schema,用它描述插件的属性和指定类型(只读/读写/内部)、可见性以及相关的用户友好(user-convinence)的过滤器和语法快捷方式(shortcut)。 与用户直接进行交互的不是插件类,而是一个自动产生的代理类,代理类在GPI中可见。代理类只包含插件类中的一些在schema中定义可见的属性以及选出用于导出的方法。插件和代理的层次(level)分离十分灵活。在GPI层插件的实现细节不可见;所有代理类都遵循相同的设计逻辑(例如按值拷贝copy-by-value);持续性自动化,会话等级锁定透明。用这种方法,底层的内部的API就与用户层的GPI分离开。 框架不强迫开发者支持app和backend的所有组合,只要支持有意义和有趣的组合即可。为便于管理这些组合,提出了submission handler的概念。sumission handler是app和backend组件的一个连接器。在提交时间,它将app的内部表示(representation)传送给特定backend可以接受的表示(representation ...!doctype> read more There are comments.
IBackend文档解析 类图: 文档解析: 1.setup(self) Ganga.core服务启动时由每个作业调用的一个钩子。在监测子系统enabled之前调用。可以被backend用来进行一些特殊的setup(比如远程backned的ssh传输管道) 2.master_submit(self,rjobs,subjobconfigs,masterjobconfig,keep_going=false) 提交主作业和所有子作业 masterjobconfig是共享的,单独的subjob配置在subjobconfig中定义 单个作业(无split的提交也通过本方法执行。在这种情况下subjobconfig只包含一个元素——作业本身。 默认实现是调用每个单独作业的submit()方法 如果任何子作业fails则整个过程被忽略并抛出一个IncompleteSubmissionError 子作业已经submit的保持submitted 默认实现不处理masterjobconfig(因此子类中一般可以重写本方法) 在IBackend_submit()中keep_going是可选的,用以允许不支持keep_going=True的backend实现,这些backend在某些情况下可能要调用IBackend.master_submit()来工作,这样就不需要重写本方法。很多情况中该参数并不重要,因此由开发维护人员决定是否启用对该参数的支持。 3.submit(self,subjobconfig,master_input_sandbox) 提交一个单独的作业。成功返回1 master_input_sandbox是一个列表,内容为所有子作业共享的文件名单 ... read more There are comments.