工作流的调度方法和装置的制作方法

文档序号:6334320阅读:212来源:国知局
专利名称:工作流的调度方法和装置的制作方法
技术领域
本发明涉及数字排版领域,具体而言,涉及工作流的调度方法和装置。
背景技术
工作流是一系列相互衔接、自动进行的业务活动或任务,是一种反映业务流程的计算机模型。工作流模型由一系列任务活动组成,这些任务活动对应于业务流程中的各个业务活动,包含执行业务活动的程序或者工具。工作流模型规定了这些任务活动间的执行顺序和执行条件,任务活动间的数据流,以及任务活动执行所需要的资源。在实际应用中,同一个工作流模型通常可以生成多个工作流实例同时运行。这些工作流实例在多数情况下,需要共享业务数据和执行资源。在印前工作流系统中,多个工作流实例的并发运行,会涉及到内容文件(业务数据),处理器(执行资源),作业传票(工作流模型)等资源的共享。为保证工作流运行结果的正确性和一致性,必须提供一种调度机制,用以控制所有工作流实例的并发运行。相关技术以串行化执行为正确性评判标准,以及基于锁或时间戳等调度机制实现并发控制,然而发明人发现,这种控制方法导致并发运行的效率较低。

发明内容
本发明旨在提供一种工作流的调度方法和装置,以解决现有技术的并发运行效率较低的问题。在本发明的实施例中,提供了一种工作流的调度方法,包括为每个处理器分别创建一个任务队列,每个任务队列包括一个或多个分别具有不同优先级的子队列;将工作流实例中的任务活动作为任务项插入到子队列中;处理器从其对应的任务队列中提取任务项,提取次序为提取高优先级的子队列;在提取的子队列中,提取队首的任务项。在本发明的实施例中,提供了一种工作流的调度装置,包括创建模块,用于为每个处理器分别创建一个任务队列,每个任务队列包括一个或多个分别具有不同优先级的子队列;插入模块,用于将工作流实例中的任务活动作为任务项插入到子队列中;提取模块, 用于使处理器从其对应的任务队列中提取任务项,提取次序为提取高优先级的子队列; 在提取的子队列中,提取队首的任务项。根据本发明实施例的工作流的调度方法和装置因为采用乐观并发控制的方案,所以克服了现有技术的工作流系统的并发效率较低的问题,提高了工作流系统的并发效率。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1示出了根据本发明一个实施例的工作流的调度方法的流程图2示出了根据本发明一个优选实施例的印前工作流的调度方法的流程图;图3示出了根据本发明一个优选实施例的印前工作流的任务队列的示意图;图4示出了根据本发明一个实施例的工作流的调度装置的方框图。
具体实施例方式下面将参考附图并结合实施例,来详细说明本发明。图1示出了根据本发明一个实施例的工作流的调度方法的流程图,包括步骤S10,为每个处理器分别创建一个任务队列,每个任务队列包括一个或多个分别具有不同优先级的子队列;步骤S20,将工作流实例中的任务活动作为任务项插入到子队列中;步骤S30,处理器从其对应的任务队列中提取任务项,提取次序为提取高优先级的子队列;在提取的子队列中,提取队首的任务项。本调度方法采用乐观并发控制的方案,在保证运行结果的正确性和一致性的前提下,放宽了对于并发正确性的判断标准,通过采用多优先级任务队列,可以灵活控制工作流实例运行的优先级。因此本调度方法可以有效控制工作流系统,克服了现有技术的工作流系统的并发效率较低的问题,提高了工作流系统的并发效率。优选地,步骤S20包括从工作流实例中提取任务活动;确定任务活动所对应的处理器;将任务活动作为任务项,插入到所对应的处理器所对应的任务队列中指定优先级的子队列的队尾。对于任务项的次序,本优选实施例采用先进先出的方法,从而可以保证任务活动的执行先后次序。值得注意的是,本发明并不限定于一个任务活动仅仅对应一个任务项,在进行工作流的分解时,一个任务活动通常对应于一个任务项,但有时候根据任务的性质以及占用执行资源的情况,可以分解为多个任务项。例如一个任务活动需要占用多个执行资源,则可以将该任务活动分解为对应于多个执行资源的任务项。执行资源是执行任务活动的程序,即处理器,每个处理器是一个单独的进程。工作流引擎对其开放接口,用于提取分配给处理器的任务项。优选地,步骤S30包括处理器循环地提取任务项,在取空任务队列之后,处理器进入休眠状态;当有新的任务项进入任务队列时,激活处理器循环地提取任务项。本优选实施例提供了休眠机制,从而可以最大限度地节约处理器的使用。优选地,本调度方法还包括在处理器处理提取的任务项,成功处理完之后,设置任务项对应的任务活动的状态为完成,并设置状态为完成的任务活动的下一个任务活动的输入条件为就绪;步骤S20包括在所有状态为未完成的任务活动中,当其输入条件为就绪时,将其作为任务项插入子队列中。优选地,本调度方法还包括在处理器处理任务项失败,判断处理次数未超过最大重试次数时,将失败的任务项的状态设置为重试;步骤S20包括在处理失败的处理器的后继处理器任务完成时,将状态为重试的任务项插入到处理失败的处理器所对应的任务队列中最高优先级的子队列的队首。因为本调度方法放宽了对于并发正确性的判断标准,所以处理器在执行任务项时,将涉及到共享数据资源竞争和冲突的问题。当其后继处理器正在提取属于前一个工作流实例的该处理器的输出资源,且该资源将替代之前的版本时,当前处理器的当前任务项将无法完成。上述两个优选实施例提供了任务处理成功失败的控制机制,可以解决共享数据资源竞争和冲突的问题。图2示出了根据本发明一个优选实施例的印前工作流的调度方法的流程图,该优选实施例综合了上述多个优选实施例的技术方案,包括以下步骤步骤S101、为工作流系统中涉及的所有执行资源(即处理器)创建任务队列,每个任务队列包含多个预定优先级的子队列;步骤S102、工作流引擎分解工作流实例,分析未完成任务活动中所有满足执行条件的任务活动的任务项,按任务项涉及的执行资源将任务项插入指定任务队列的指定优先级的子队列的队尾;步骤S103、处理器从对应的任务队列中提取任务项处理,提取次序为,首先提取高优先级的子队列内任务项;同优先级的子队列中,取队首的任务项;步骤S104、处理器处理提取的任务项,成功处理完相应的任务项后,将任务项状态置为完成;步骤S105、工作流引擎将任务项全部完成的任务活动的状态置为完成,并设置该任务活动后继任务活动的输入条件为就绪;步骤S106、重复S102-S105,直至所有任务活动状态全部为就绪。在步骤S102中,在所有状态为未完成的任务活动中,只有其所有输入条件都为就绪时,工作流引擎才会分析其定义,分解出其包含的任务项,将任务项按优先级排入对应的队列。在步骤S103中,处理器循环提取属于自身的任务项,在取空任务队列后,处理器处理循环进入休眠状态。当有新的任务项进入队列时,工作流引擎将激活通知处理器激活任务处理器循环。处理器在处理失败时,如果该任务项重试次数未超过最大重试次数,将当前任务项状态置为重试。在该处理器的后继处理器任务完成提交时,工作流引擎将触发任务调度器将该任务项排入处理器对应的任务队列的最高优先级的子队列的队首。图3示出了根据本发明一个优选实施例的印前工作流的任务队列的示意图,本优选实施例是一个印前业务工作流实例,由规范化、预飞、PDF导出三个任务活动组成,每个任务活动包含一个任务项。针对该业务流程,采用本发明提供的方法的实施步骤如下S201、在工作流系统中,为规范化处理器、预飞处理器、PDF导出处理器创建如图所示的任务队列,根据业务需要,规范化处理器的任务队列分三个优先级,预飞处理器的任务队列分两个优先级,PDF导出处理器任务队列只有一个优先级;S202、工作流引擎分解工作流实例1的规范化器的任务项,将任务项放入对应的优先级的子队列;S203、工作流引擎激活规范化器的处理循环,当规范化器完成任务项,生成规范的可移植文档格式PDF文件后,将任务项状态置为完成;S204、工作流引擎将工作流实例1的规范化任务活动的状态置为完成;S205、调度器分解工作流实例1的预飞处理的任务项,将任务项排入预飞处理器对应的任务队列中,并激活预飞处理器的处理循环;
S206、当PDF文件内容发生变化后,启动工作流实例2运行,将规范化任务活动对应的任务项排入规范化器对应的任务队列。如果此时规范化器队列内没有更多的任务项处理,那么规范化器的处理循环处于休眠状态,需要工作流引擎激活处理循环;S207、工作流实例2的规范化器,开始对执行器任务项,生成新的PDF文件版本,已覆盖工作流实例1中规范化器生成的PDF文件。工作流实例1的处理动作尚未完成,规范化任务失败。规范化器将该任务项的状态设为重试。如果任务队列中还有任务项,规范化器将继续处理新的任务项。S208、工作流实例1的预飞任务项完成后,调度器重新将工作流实例2的规范化任务项排入规范化器的任务队列,激活规范化器的处理循环。图4示出了根据本发明一个实施例的工作流的调度装置(即图2中的调度器)的方框图,包括创建模块10,用于为每个处理器分别创建一个任务队列,每个任务队列包括一个或多个分别具有不同优先级的子队列;插入模块20,用于将工作流实例中的任务活动作为任务项插入到子队列中;提取模块30,用于使步骤S30,提取次序为提取高优先级的子队列;在提取的子队列中,提取队首的任务项。本调度装置可以有效控制工作流系统,克服了现有技术的工作流系统的并发效率较低的问题,提高了工作流系统的并发效率。优选地,插入模块包括第一模块,用于从工作流实例中提取任务活动;第二模块,用于确定任务活动所对应的处理器;第三模块,用于将任务活动作为任务项,插入到所对应的处理器所对应的任务队列中指定优先级的子队列的队尾。本优选实施例采用先进先出的方法,从而可以保证任务活动的执行先后次序。优选地,提取模块包括第一模块,用于使处理器循环地提取任务项,在取空任务队列之后,使处理器进入休眠状态;第二模块,用于当有新的任务项进入任务队列时,激活处理器循环地提取任务项。本优选实施例提供了休眠机制,从而可以最大限度地节约处理器的使用。优选地,本调度装置还包括设置模块,用于在处理器处理提取的任务项,成功处理完之后,设置任务项对应的任务活动的状态为完成,并设置状态为完成的任务活动的下一个任务活动的输入条件为就绪;插入模块用于在所有状态为未完成的任务活动中,当其输入条件为就绪时,将其作为任务项插入子队列中。优选地,本调度装置还包括重试模块,用于在处理器处理任务项失败,判断处理次数未超过最大重试次数时,将失败的任务项的状态设置为重试;插入模块用于在处理失败的处理器的后继处理器任务完成时,将状态为重试的任务项插入到处理失败的处理器所对应的任务队列中最高优先级的子队列的队首。上述两个优选实施例提供了任务处理成功失败的控制机制,可以解决共享数据资源竞争和冲突的问题。从以上的描述中可以看出,本发明上述的实施例提高了工作流系统的并发效率。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种工作流的调度方法,其特征在于,包括为每个处理器分别创建一个任务队列,每个所述任务队列包括一个或多个分别具有不同优先级的子队列;将工作流实例中的任务活动作为任务项插入到所述子队列中; 所述处理器从其对应的所述任务队列中提取所述任务项,提取次序为提取高优先级的所述子队列;在所述提取的子队列中,提取队首的所述任务项。
2.根据权利要求1所述的方法,其特征在于,将工作流实例中的任务活动作为任务项插入到所述子队列中包括从所述工作流实例中提取所述任务活动; 确定所述任务活动所对应的所述处理器;将所述任务活动作为所述任务项,插入到所对应的所述处理器所对应的任务队列中指定优先级的所述子队列的队尾。
3.根据权利要求1所述的方法,其特征在于,所述处理器从其对应的所述任务队列中提取所述任务项包括所述处理器循环地提取所述任务项,在取空所述任务队列之后,所述处理器进入休眠状态;当有新的所述任务项进入所述任务队列时,激活所述处理器循环地提取所述任务项。
4.根据权利要求1所述的方法,其特征在于,还包括在所述处理器处理所述提取的任务项,成功处理完之后,设置所述任务项对应的任务活动的状态为完成,并设置状态为完成的所述任务活动的下一个任务活动的输入条件为就绪;将工作流实例中的任务活动作为任务项插入到所述子队列中包括在所有状态为未完成的所述任务活动中,当其输入条件为就绪时,将其作为任务项插入所述子队列中。
5.根据权利要求4所述的方法,其特征在于,还包括在所述处理器处理所述任务项失败,判断处理次数未超过最大重试次数时,将所述失败的任务项的状态设置为重试;将工作流实例中的任务活动作为任务项插入到所述子队列中包括在所述处理失败的处理器的后继处理器任务完成时,将所述状态为重试的任务项插入到所述处理失败的处理器所对应的任务队列中最高优先级的子队列的队首。
6.一种工作流的调度装置,其特征在于,包括创建模块,用于为每个处理器分别创建一个任务队列,每个所述任务队列包括一个或多个分别具有不同优先级的子队列;插入模块,用于将工作流实例中的任务活动作为任务项插入到所述子队列中; 提取模块,用于使所述处理器从其对应的所述任务队列中提取所述任务项,提取次序为提取高优先级的所述子队列;在所述提取的子队列中,提取队首的所述任务项。
7.根据权利要求6所述的装置,其特征在于,所述插入模块包括 第一模块,用于从所述工作流实例中提取所述任务活动; 第二模块,用于确定所述任务活动所对应的所述处理器;第三模块,用于将所述任务活动作为所述任务项,插入到所对应的所述处理器所对应的任务队列中指定优先级的所述子队列的队尾。
8.根据权利要求6所述的装置,其特征在于,所述提取模块包括第一模块,用于使所述处理器循环地提取所述任务项,在取空所述任务队列之后,使所述处理器进入休眠状态;第二模块,用于当有新的所述任务项进入所述任务队列时,激活所述处理器循环地提取所述任务项。
9.根据权利要求6所述的装置,其特征在于,还包括设置模块,用于在所述处理器处理所述提取的任务项,成功处理完之后,设置所述任务项对应的任务活动的状态为完成,并设置状态为完成的所述任务活动的下一个任务活动的输入条件为就绪;所述插入模块用于在所有状态为未完成的所述任务活动中,当其输入条件为就绪时, 将其作为任务项插入所述子队列中。
10.根据权利要求9所述的装置,其特征在于,还包括重试模块,用于在所述处理器处理所述任务项失败,判断处理次数未超过最大重试次数时,将所述失败的任务项的状态设置为重试;所述插入模块用于在所述处理失败的处理器的后继处理器任务完成时,将所述状态为重试的任务项插入到所述处理失败的处理器所对应的任务队列中最高优先级的子队列的队首。
全文摘要
本发明提供了一种工作流的调度方法和装置,方法包括为每个处理器分别创建一个任务队列,每个任务队列包括一个或多个分别具有不同优先级的子队列;将工作流实例中的任务活动作为任务项插入到子队列中;处理器从其对应的任务队列中提取任务项,提取次序为提取高优先级的子队列;在提取的子队列中,提取队首的任务项。本发明提高了工作流系统的并发效率。
文档编号G06F9/46GK102455934SQ20101051763
公开日2012年5月16日 申请日期2010年10月25日 优先权日2010年10月25日
发明者侯存军, 谢浩 申请人:北京北大方正电子有限公司, 北大方正集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1