一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种任务管理方法、系统、设备及存储介质与流程

2021-12-01 00:57:00 来源:中国专利 TAG:


1.本发明涉及任务处理技术领域,特别是涉及一种任务管理方法、系统、设备及存储介质。


背景技术:

2.celery是一个异步任务调度工具,采用分布式任务队列模式,支持高并发执行海量任务,例如服务器内存、cpu、memory使用数据采集时,或异步发起向指定服务器执行某条命令等场景。
3.目前,celery的任务注册方式通常是在后台脚本方法中添加celery任务注解,由celery自动扫描出任务方法名并将方法名加入到内存中。但是,在业务逻辑变更时,这样的方式需要重启celery服务进程代码才能生效,即这样的方式会造成应用系统重启,阻断正在执行中的异步任务,容易造成数据混乱,降低系统稳定性与可持续性。
4.对此,目前的一种方式是通过将任务导入到公共模块,利用python动态脚本语言的特性,动态执行预定义的任务执行代码,实现无需重启worker进程自动执行任务最新逻辑。但这种方式仅对任务代码中无引用其他非celery任务模块有效(例如在celery任务中引用了某一公共方法,但该公共方法为静态脚本中定义,并未维护在数据库中),则当任务中引用的静态方法代码改变时,celery应用服务仍需重启才能执行最新的代码逻辑。还有的一种方式是通过将任务执行代码生成任务执行脚本,并将脚本内容加载到内存中,定期轮询对比代码时间戳,并将时间戳变更的任务逻辑代码重新加载到内存中,实现无需重启worker自动执行最新任务。这样的方式中,应用系统需单独运行一套定时轮询进程,轮询检测所有celery任务的时间戳,当应用服务硬件资源紧张时会影响到celery原有进程的正常执行,且当该进程出现异常时或者存在人为修改服务器时间时,时间戳的判断极有可能失效,易形成单点故障,导致celery无法执行最新代码。
5.综上所述,如何无需重启便可以自动生效celery任务,并且保证系统的稳定性,是目前本领域技术人员急需解决的技术问题。


技术实现要素:

6.本发明的目的是提供一种任务管理方法,以无需重启便可以自动生效celery任务,并且保证系统的稳定性。
7.为解决上述技术问题,本发明提供如下技术方案:一种任务管理方法,包括:在启动celery服务时,扫描出目标任务方法;识别出所述目标任务方法所调用的各个模块,并且将各个所述模块的文件内容校验值存储到缓存中;在执行所述目标任务方法之前,确定出所述目标任务方法的调用链模块集合;计算出所述调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出
的任意一个模块的文件内容校验值,判断是否与缓存中的该模块的文件内容校验值一致;如果任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,则更新缓存中的该模块的文件内容校验值,并且通过模块重载入的方式将该模块的方法引入至缓存中;执行所述目标任务方法。
8.优选的,所述识别出所述目标任务方法所调用的各个模块,并且将各个所述模块的文件内容校验值存储到缓存中,包括:识别出所述目标任务方法所属的模块,以及所述目标任务方法所引用的各个模块;将所述目标任务方法所属的模块的名称作为key,将所述目标任务方法所属的模块的文件内容校验值,以及当前的进程号作为value值,存储到缓存中;针对所述目标任务方法所引用的任意一个模块,将该模块的名称作为key,将该模块的文件内容校验值,以及当前的进程号作为value值,存储到缓存中;相应的,所述计算出所述调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断是否与缓存中的该模块的文件内容校验值一致;如果任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,则更新缓存中的该模块的文件内容校验值,并且通过模块重载入的方式将该模块的方法引入至缓存中,包括:计算出所述调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断缓存中是否存在一个value值,使得该value值中的文件内容校验值与计算出的该模块的文件内容校验值一致,且该value值中的进程号与当前的进程号一致;如果不存在,则更新缓存中的该模块的当前进程的value值,并且在当前的进程中,通过模块重载入的方式将该模块的方法引入至缓存中。
9.优选的,在识别出所述目标任务方法所调用的各个模块,并且将各个所述模块的文件内容校验值存储到缓存中之后,还包括:将所述目标任务方法作为key,将所述目标任务方法所调用的各个模块所构成的模块列表作为value值,存储到缓存中;相应的,所述在执行所述目标任务方法之前,确定出所述目标任务方法的调用链模块集合,包括:在执行所述目标任务方法之前,将识别出的所述目标任务方法所调用的各个模块,和缓存中存储的所述目标任务方法所调用的各个模块所构成的模块列表取并集,得到确定出的所述目标任务方法的调用链模块集合;相应的,在得到确定出的所述目标任务方法的调用链模块集合之后,还包括:更新缓存中的所述目标任务方法所调用的各个模块所构成的模块列表。
10.优选的,所述识别出所述目标任务方法所调用的各个模块,并且将各个所述模块的文件内容校验值存储到缓存中,包括:识别出所述目标任务方法所调用的各个模块,并且通过多线程的方式,将各个所述模块的文件内容校验值存储到缓存中。
11.优选的,所述识别出所述目标任务方法所调用的各个模块,包括:通过关键字识别出所述目标任务方法所调用的各个模块。
12.优选的,任意一个模块的文件内容校验值均为md5校验值。
13.优选的,所述缓存为redis缓存。
14.一种任务管理系统,包括:扫描模块,用于在启动celery服务时,扫描出目标任务方法;预存储模块,用于识别出所述目标任务方法所调用的各个模块,并且将各个所述模块的文件内容校验值存储到缓存中;调用链模块集合确定模块,用于在执行所述目标任务方法之前,确定出所述目标任务方法的调用链模块集合;验证模块,用于计算出所述调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断是否与缓存中的该模块的文件内容校验值一致;重载更新模块,用于如果任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,则更新缓存中的该模块的文件内容校验值,并且通过模块重载入的方式将该模块的方法引入至缓存中;执行模块,用于执行所述目标任务方法。
15.一种任务管理设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序以实现如上述任一项所述的任务管理方法的步骤。
16.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的任务管理方法的步骤。
17.应用本发明实施例所提供的技术方案,在执行所述目标任务方法之前,增加了前置的验证操作。具体的,在启动celery服务时,会扫描出目标任务方法,从而识别出所述目标任务方法所调用的各个模块,并且将各个所述模块的文件内容校验值存储到缓存中。这样使得在执行所述目标任务方法之前,确定出所述目标任务方法的调用链模块集合,从而可以计算出所述调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断是否与缓存中的该模块的文件内容校验值一致。如果任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,说明该模块已经变更,则本技术会更新缓存中的该模块的文件内容校验值,并且通过模块重载入的方式将该模块的方法引入至缓存中,由于是通过模块重载入的方式将该模块的方法引入至缓存中,因此,可以在不需要重启worker进程的前提下,执行最新的代码,并且本技术的方案不会破坏系统的稳定性。
附图说明
18.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他的附图。
19.图1为本发明中一种任务管理方法的实施流程图;图2为本发明中一种任务管理系统的结构示意图。
具体实施方式
20.本发明的核心是提供一种任务管理方法,无需重启便可以自动生效celery任务,并且不会破坏系统的稳定性。
21.为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
22.请参考图1,图1为本发明中一种任务管理方法的实施流程图,该任务管理方法可以包括以下步骤:步骤s101:在启动celery服务时,扫描出目标任务方法。
23.具体的,在执行本技术的方案之前,可以准备python环境,在python环境中完成celery及其配套消息队列软件以及缓存服务的安装,之后,将新封装的任务执行模块引入到工程中,并启动celery服务应用进程。
24.本技术的缓存通常可以为redis缓存,是一种开源的、支持网络、可基于内存亦可持久化的key

value数据库,同时亦可作为消息队列使用。
25.在启动celery服务时,可以扫描出每一个任务方法,本技术的目标任务方法可以表示扫描出的任意一个任务方法,即本技术是用目标任务方法来进行说明。
26.步骤s102:识别出目标任务方法所调用的各个模块,并且将各个模块的文件内容校验值存储到缓存中。
27.扫描出目标任务方法之后,可以得到目标任务方法所在的模块,或者称为目标任务方法所属的模块,并且可以得到目标任务方法所属的模块的路径。
28.目标任务方法所调用的各个模块,包括了目标任务方法所属的模块,以及目标任务方法所引用的各个模块。
29.在具体实施时,可以通过关键字识别出目标任务方法所调用的各个模块,较为简单方便。当然,其他实施方式中可以通过其他方式识别出目标任务方法所调用的各个模块,并不影响本发明的实施。
30.得到了目标任务方法所属的模块及其路径之后,通过读取该模块的模块头部引入的方法名,便可以通过关键字(import/from)识别出目标任务方法所在的模块中引用的应用中其他模块名称与方法名称。例如一种场合中目标任务方法所属的模块为模块a,目标任务方法所引用的各个模块具体为b,c,d,并且具体引用的是模块b的方法1和方法2,模块c的方法1以及模块d的方法5。
31.通过python内置的_code_方法,可以获取到目标任务方法所引用的各个模块的路径以及方法名,也可以获取到目标任务方法所属的模块的路径以及方法名。
32.识别出了目标任务方法所调用的各个模块之后,需要将各个模块的文件内容校验值存储到缓存中,例如以模块名称为key,以该模块的文件内容校验值为value值,存储在缓
存中。
33.在本发明的一种具体实施方式中,步骤s102可以具体包括:识别出目标任务方法所调用的各个模块,并且通过多线程的方式,将各个模块的文件内容校验值存储到缓存中。
34.该种实施方式中,是通过多线程的方式,将各个模块的文件内容校验值存储到缓存中,是考虑到需要进行多个模块的文件内容校验值的计算,通过多线程的方式可以同时进行,从而可以提高效率,节约时间。
35.文件内容校验值的具体种类可以根据实际需要进行设定和调整,例如在本发明的一种具体实施方式中,考虑到md5校验值使用广泛,较为成熟,因此,任意一个模块的文件内容校验值可以均为md5校验值。本技术的后文的实施方式中,便以md5校验值为例进行说明。
36.步骤s103:在执行目标任务方法之前,确定出目标任务方法的调用链模块集合。
37.本技术的方案中,在执行目标任务方法之前,需要按照本技术的流程进行前置验证,即验证目标任务方法的代码是否变更。
38.具体的,可以确定出目标任务方法的调用链模块集合,例如,一种场合中,可以直接识别目标任务方法所调用的各个模块,从而得到目标任务方法的调用链模块集合。即,将识别出的目标任务方法所属的模块以及目标任务方法所引用的各个模块,作为步骤s103中确定出的目标任务方法的调用链模块集合。此外可以理解的是,如果目标任务方法没有发生变化,则该例子中确定出的目标任务方法的调用链模块集合,与此前步骤s102中识别出的目标任务方法所调用的各个模块应当是一致的,而如果目标任务方法发生了变化,则二者便可能不一致。
39.步骤s104:计算出调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断是否与缓存中的该模块的文件内容校验值一致。
40.在计算出调用链模块集合中的每一个模块的文件内容校验值时,同样可以通过多线程的方式来实现,从而可以提高效率,节约时间。
41.针对计算出的任意一个模块的文件内容校验值,需要判断是否与缓存中的该模块的文件内容校验值一致。
42.步骤s105:如果任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,则更新缓存中的该模块的文件内容校验值,并且通过模块重载入的方式将该模块的方法引入至缓存中。
43.如果判断出任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,则说明该模块的文件内容发生了变更,因此,本技术会通过模块重载入的方式将该模块的方法引入至缓存中,由于是通过模块重载入的方式将该模块的方法引入至缓存中,因此不需要重启worker进程,同时也不会破坏系统的稳定性。
44.除了需要通过模块重载入的方式将该模块的方法引入至缓存中,还需要更新缓存中的该模块的文件内容校验值,也就是利用步骤s104中计算出的该模块的文件内容校验值,更新缓存中存储的该模块的文件内容校验值,以便下次对比。
45.并且可以理解的是,针对计算出的每一个模块的文件内容校验值,如果与缓存中的对应的模块的文件内容校验值都是一致的,则可以执行目标任务方法,即可以直接执行步骤s106。
46.步骤s106:执行目标任务方法。
47.完成了上述的校验值验证以及缓存更新的操作之后,便可以执行步骤s106的执行目标任务方法的操作。
48.在本发明的一种具体实施方式中,步骤s102可以具体,包括:识别出目标任务方法所属的模块,以及目标任务方法所引用的各个模块;将目标任务方法所属的模块的名称作为key,将目标任务方法所属的模块的文件内容校验值,以及当前的进程号作为value值,存储到缓存中;针对目标任务方法所引用的任意一个模块,将该模块的名称作为key,将该模块的文件内容校验值,以及当前的进程号作为value值,存储到缓存中;相应的,步骤s104和步骤s105具体包括:计算出调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断缓存中是否存在一个value值,使得该value值中的文件内容校验值与计算出的该模块的文件内容校验值一致,且该value值中的进程号与当前的进程号一致;如果不存在,则更新缓存中的该模块的当前进程的value值,并且在当前的进程中,通过模块重载入的方式将该模块的方法引入至缓存中。
49.该种实施方式中,考虑到在实际应用中,celery可以支持多个进程号,不同的进程号之间是相互独立的,即同一个任务方法,允许不同的进程号按照不同的版本来执行。
50.因此,该种实施方式中,在步骤s102中识别出目标任务方法所属的模块,以及目标任务方法所引用的各个模块时,存储到缓存中value值的不仅仅是相应模块的文件内容校验值,还有当前的进程号,从而使得后续可以进行进程号的区分。
51.具体的,后续在执行步骤s104和步骤s105时,针对计算出的任意一个模块的文件内容校验值,不仅需要判断md5值是否一致,还需要判断进程号是否一致。
52.例如在一种场合中,针对计算出的任意一个模块的文件内容校验值,可以先判断缓存中是否有一个value值,该value值中的md5值需要与计算出的该模块的md5值是一致的。如果存在,则还要判断该value值中的进程号与当前的进程号是否一致,如果不一致,便说明该value值属于其他的进程号,当前的进程号尚未重载,则需要在当前的进程中,通过模块重载入的方式将该模块的方法引入至缓存中。
53.当然,针对计算出的任意一个模块的文件内容校验值,如果缓存中是否存在一个value值,该value值中的文件内容校验值与计算出的该模块的文件内容校验值一致,且该value值中的进程号与当前的进程号一致,说明无需进行该模块的方法的重载。
54.在本发明的一种具体实施方式中,在步骤s102之后,还可以包括:将目标任务方法作为key,将目标任务方法所调用的各个模块所构成的模块列表作为value值,存储到缓存中;相应的,步骤s103可以具体包括:在执行目标任务方法之前,将识别出的目标任务方法所调用的各个模块,和缓存中存储的目标任务方法所调用的各个模块所构成的模块列表取并集,得到确定出的目标任务方法的调用链模块集合;相应的,在得到确定出的目标任务方法的调用链模块集合之后,还可以包括:
更新缓存中的目标任务方法所调用的各个模块所构成的模块列表。
55.在前述的一种具体实施方式中,在确定出目标任务方法的调用链模块集合时,是直接识别目标任务方法所调用的各个模块,从而得到目标任务方法的调用链模块集合。
56.该种实施方式中,则是将识别出的目标任务方法所调用的各个模块,和缓存中存储的目标任务方法所调用的各个模块所构成的模块列表取并集,得到确定出的目标任务方法的调用链模块集合,可以有效地降低由于步骤s103中识别出的目标任务方法所调用的各个模块出错,导致确定出的目标任务方法的调用链模块集合不完整的情况的发生概率,即提高了方案的可靠性。
57.当然,这样的实施方式便要求在内存中存储有目标任务方法所调用的各个模块,即需要将目标任务方法作为key,将目标任务方法所调用的各个模块所构成的模块列表作为value值,存储到缓存中。并且在得到确定出的目标任务方法的调用链模块集合之后,还需要进行更新,即基于步骤s103中在执行目标任务方法之前识别出的目标任务方法所调用的各个模块,更新缓存中的目标任务方法所调用的各个模块所构成的模块列表应用本发明实施例所提供的技术方案,在执行目标任务方法之前,增加了前置的验证操作。具体的,在启动celery服务时,会扫描出目标任务方法,从而识别出目标任务方法所调用的各个模块,并且将各个模块的文件内容校验值存储到缓存中。这样使得在执行目标任务方法之前,确定出目标任务方法的调用链模块集合,从而可以计算出调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断是否与缓存中的该模块的文件内容校验值一致。如果任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,说明该模块已经变更,则本技术会更新缓存中的该模块的文件内容校验值,并且通过模块重载入的方式将该模块的方法引入至缓存中,由于是通过模块重载入的方式将该模块的方法引入至缓存中,因此,可以在不需要重启worker进程的前提下,执行最新的代码,并且本技术的方案不会破坏系统的稳定性。
58.相应于上面的方法实施例,本发明实施例还提供了一种任务管理系统,可与上文相互对应参照。
59.参见图2所示,为本发明中一种任务管理系统的结构示意图,包括:扫描模块201,用于在启动celery服务时,扫描出目标任务方法;预存储模块202,用于识别出目标任务方法所调用的各个模块,并且将各个模块的文件内容校验值存储到缓存中;调用链模块集合确定模块203,用于在执行目标任务方法之前,确定出目标任务方法的调用链模块集合;验证模块204,用于计算出调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断是否与缓存中的该模块的文件内容校验值一致;重载更新模块205,用于如果任意一个模块的文件内容校验值与缓存中的该模块的文件内容校验值不一致,则更新缓存中的该模块的文件内容校验值,并且通过模块重载入的方式将该模块的方法引入至缓存中;执行模块206,用于执行目标任务方法。
60.在本发明的一种具体实施方式中,预存储模块202,具体用于:
识别出目标任务方法所属的模块,以及目标任务方法所引用的各个模块;将目标任务方法所属的模块的名称作为key,将目标任务方法所属的模块的文件内容校验值,以及当前的进程号作为value值,存储到缓存中;针对目标任务方法所引用的任意一个模块,将该模块的名称作为key,将该模块的文件内容校验值,以及当前的进程号作为value值,存储到缓存中;相应的,验证模块204,具体用于:计算出调用链模块集合中的每一个模块的文件内容校验值,并且针对计算出的任意一个模块的文件内容校验值,判断缓存中是否存在一个value值,使得该value值中的文件内容校验值与计算出的该模块的文件内容校验值一致,且该value值中的进程号与当前的进程号一致;如果不存在,则重载更新模块205,具体用于:更新缓存中的该模块的当前进程的value值,并且在当前的进程中,通过模块重载入的方式将该模块的方法引入至缓存中。
61.在本发明的一种具体实施方式中,还包括:调用链预存储模块,用于在预存储模块202识别出目标任务方法所调用的各个模块,并且将各个模块的文件内容校验值存储到缓存中之后,将目标任务方法作为key,将目标任务方法所调用的各个模块所构成的模块列表作为value值,存储到缓存中;相应的,调用链模块集合确定模块203,具体用于:在执行目标任务方法之前,将识别出的目标任务方法所调用的各个模块,和缓存中存储的目标任务方法所调用的各个模块所构成的模块列表取并集,得到确定出的目标任务方法的调用链模块集合;相应的,在得到确定出的目标任务方法的调用链模块集合之后,还包括:调用链更新模块,用于更新缓存中的目标任务方法所调用的各个模块所构成的模块列表。
62.在本发明的一种具体实施方式中,预存储模块202,具体用于:识别出目标任务方法所调用的各个模块,并且通过多线程的方式,将各个模块的文件内容校验值存储到缓存中。
63.在本发明的一种具体实施方式中,预存储模块202识别出目标任务方法所调用的各个模块,具体为:预存储模块202通过关键字识别出目标任务方法所调用的各个模块。
64.在本发明的一种具体实施方式中,任意一个模块的文件内容校验值均为md5校验值。
65.在本发明的一种具体实施方式中,缓存为redis缓存。
66.相应于上面的方法和系统实施例,本发明实施例还提供了一种任务管理设备以及一种计算机可读存储介质,可与上文相互对应参照。
67.该任务管理设备可以包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序以实现如权利要求上述任一实施例中的任务管理方法的步骤。
68.该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如
权利要求上述任一实施例中的任务管理方法的步骤。这里所说的计算机可读存储介质包括随机存储器(ram)、缓存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd

rom、或技术领域内所公知的任意其它形式的存储介质。
69.还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
70.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
71.本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献