任务的执行方法及装置、存储介质和电子装置与流程

专利2022-06-29  98


本发明涉及计算机领域,具体而言,涉及一种任务的执行方法及装置、存储介质和电子装置。



背景技术:

现在很多互联网系统的用户操作都是即时性的,但是也有许多延时性的操作。例如,用于外卖的app(应用),在用户下完单后,如果未及时付款,超过一定的时间订单就被自动取消了,这就是延时任务。延时任务的应用场景相当广泛,除了外卖的app,还有购物app中的支付过程等都有这样的场景。

现有技术中执行延时任务的框架包括:quartz(一个由java编写的开源作业调度框架),xxl-job(一种分布式任务调度平台),但是这些框架太大而全,需要配置部署很多东西(通常需要额外部署服务器去跑框架),用起来不方便,对于一个小规模的应用来说太重了。

针对相关技术中的上述问题,目前尚未存在有效的解决方案。



技术实现要素:

本发明实施例提供了一种任务的执行方法及装置、存储介质和电子装置,以至少解决相关技术中在执行延时任务的情况下需要额外部署服务器去运行导致执行延时任务的效率比较低的问题。

根据本发明的一个实施例,提供了一种任务的执行方法,包括:获取服务器的当前时间和用于指示延时执行任务的延时时间;

在所述延时时间大于所述当前时间的情况下,将所述任务对应的任务信息添加到本地的队列中,其中,所述队列中的任务信息根据对应的延时时间进行排序;所述任务信息包括所述任务对应的延时时间和所述任务对应的任务标识;将所述队列中未执行的任务的任务标识对应的任务数据及所述任务标识存储至数据库;在所述队列中所述任务的延时时间小于或等于所述服务器的当前时间的情况下,执行所述任务。

根据本发明的另一个实施例,提供了一种任务的执行装置,包括:获取模块,用于获取服务器的当前时间和用于指示延时执行任务的延时时间;添加模块,用于在所述延时时间大于所述当前时间的情况下,将所述任务对应的任务信息添加到本地的队列中,其中,所述队列中的任务信息根据对应的延时时间进行排序;所述任务信息包括所述任务对应的延时时间和所述任务对应的任务标识;存储模块,用于将所述队列中未执行的任务的任务标识对应的任务数据及所述任务标识存储至数据库;执行模块,用于在所述队列中所述任务的延时时间小于或等于所述服务器的当前时间的情况下,执行所述任务。

根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

通过本发明,将设置有延时时间的任务信息放入本地的队列中,而在该队列中是根据延时时间对任务信息进行排序的,在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务,从而无需额外部署服务器去运行,解决了相关技术中在执行延时任务的情况下需要额外部署服务器去运行导致执行延时任务的效率比较低的问题,提高了延时任务执行的效率。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的任务的执行方法的终端的硬件结构框图;

图2是根据本发明实施例的任务的执行方法流程图;

图3是根据本发明实施例的任务的执行装置的结构框图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

首先,对本申请中的术语进行相应的解释;

scheduledexecutorservice:一个延时/周期执行的线程池;

线程池:是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务;

mysql:关系型数据库管理系统;

priorityqueue:优先队列;普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出(firstin,largestout)的行为特征。通常采用堆数据结构来实现。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

实施例1

本申请实施例一所提供的方法实施例可以在终端、计算机终端或者类似的运算装置中执行。以运行在终端上为例,图1是本发明实施例的一种任务的执行方法的终端的硬件结构框图。如图1所示,终端10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,可选地,上述终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述终端的结构造成限定。例如,终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的任务的执行方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括终端10的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(networkinterfacecontroller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。

在本实施例中提供了一种运行于上述终端的任务的执行方法,图2是根据本发明实施例的任务的执行方法流程图,如图2所示,该流程包括如下步骤:

步骤s202,获取服务器的当前时间和用于指示延时执行任务的延时时间;

步骤s204,在延时时间大于当前时间的情况下,将任务对应的任务信息添加到本地的队列中,其中,队列中的任务信息根据对应的延时时间进行排序;任务信息包括任务对应的延时时间和任务对应的任务标识;

步骤s206,将队列中未执行的任务的任务标识对应的任务数据及任务标识存储至数据库;

步骤s208,在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务。

通过上述步骤s202至步骤s208,将设置有延时时间的任务信息放入本地的队列中,而在该队列中是根据延时时间对任务信息进行排序的,在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务,从而无需额外部署服务器去运行,解决了相关技术中在执行延时任务的情况下需要额外部署服务器去运行导致执行延时任务的效率比较低的问题,提高了延时任务执行的效率。

需要说明的是,在具体应用场景中,该本地的队列可以是scheduledexecutorservice里面的priorityqueue(优先队列)。

可选地,在本申请的可选实施方式,对于步骤s208中涉及到的在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务的方式,进一步可以通过以下方式实现:

步骤s208-11,根据排序结果从队列中取出延时时间最小的第一任务信息;其中,第一任务信息包括第一任务延时时间和第一任务标识;

步骤s208-12,判断第一任务的延时时间是否小于或等于服务器的当前时间;

步骤s208-13,在判断结果为是的情况下,执行数据库中的第一任务标识对应的第一任务数据。

可见,通过上述步骤s206-11至步骤s206-13可知,对于队列中的排序第一的延时任务(第一任务信息),需要将其延时时间与当前服务器时间进行比较,在延时时间小于或等于服务器的当前时间的情况下执行数据库中的第一任务标识对应的第一任务数据,也即执行该任务;并以此执行后续任务。对此,在具体应用场景中可以是:scheduledexecutorservice会一直循环,每次循环从priorityqueue中取出最前面的一个任务,并拿当前时间和该任务设置的时间比较,如果任务设置的时间小于或等于当前时间则会立即调用schedule方法执行任务。

在本申请实施例的另一个可选实施方式中,在第一任务的延时时间小于或等于服务器的当前时间的情况下,删除队列中的第一任务信息。

可见,在本申请中在判断结果为是的情况下,执行数据库中的第一任务标识对应的第一任务数据的同时删除队列中的第一任务信息。此外,在删除第一任务信息后,后面的第二任务信息就变为下次判断的第一任务信息。

基于此,在判断任务的延时时间是否小于或等于服务器的当前时间,根据判断结果执行任务之后,删除数据库中已执行任务的任务数据及对应的任务标识。

对于本申请步骤s208中涉及到的在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务的方式,进一步可以是:设定判断周期,当判断周期到达时,判断队列中任务的延时时间是否小于或等于服务器的当前时间。

需要说明的是,该判断周期在具体应用场景中可以是scheduledexecutorservice的循环周期,从而可以保证scheduledexecutorservice与任务执行是异步进行的,即任务的执行(任务的执行时间可能很长),不会影响后续任务延时时间的判断。

需要说明的是,本实施例中涉及到的队列中未执行的任务的任务标识对应的任务数据及任务标识存储至数据库,在具体应用场景中可以是,把scheduledexecutorservice里面的priorityqueue中还未执行的任务数据存到mysql中,并为每一个任务增加一个唯一的id编号。防止当服务器宕机或者应用重启的时候还未执行的延时任务数据丢失(priorityqueue里面的数据是存在于内存中的,断电会丢失),当服务器/应用重启的时候再从mysql中读取任务数据并加载到内存中scheduledexecutorservice里面的priorityqueue中。

在本申请实施例的另一个可选实施方式中,本申请的方法步骤还包括:

步骤s210,在延时时间小于或等于当前时间的情况下,触发执行与小于或等于当前时间的延时时间对应的任务。

需要说明的是,因为当cpu执行到此处的判断逻辑时会有毫秒的延迟,从而在某些情况下会导致延时时间小于或等于服务器的当前时间,则立即调用scheduledexecutorservice的schedule方法执行任务。

可选地,对于本申请步骤s202中涉及到的在获取用于指示延时执行任务的延时时间的方式,可以通过如下方式来实现:

步骤s202-11,判断任务的延时时间的格式是否为预设格式;

步骤s202-12,在判断结果为否的情况下,提示任务的延时时间的格式不正确;

步骤s202-13,在判断结果为是的情况下,提示任务的延时时间的格式正确。

在本申请中可以校验时间的格式是否符合yyyy-mm-ddhh:mm:ss的格式(预设格式)并且大于等于当前系统时间(此处的格式只是举例,实际根据不同的场景需求也可以精确到不同的时间精度,比如yyyy-mm-ddhh:mm到分钟,yyyy-mm-dd到天等等),如果不符合格式则返回用户输入的时间不合法的异常提示。

下面结合本申请中的可选实施方式对本申请进行举例说明;

在本可选实施方式中提供了一种基于scheduledexecutorservice和mysql实现延时任务的方法,该方法的步骤包括:

步骤s301,接受任务和延时执行的时间信息;

其中,校验时间的格式是否符合yyyy-mm-ddhh:mm:ss的格式并且大于等于当前系统时间(此处的格式只是举例,实际根据不同的场景需求也可以精确到不同的时间精度,比如yyyy-mm-ddhh:mm到分钟,yyyy-mm-dd到天等等),如果不符合格式则返回用户输入的时间不合法的异常提示。

获取服务器的当前时间,并判断任务的延时时间是否小于等于当前时间(延时任务的时间可能会小于当前时间,因为当cpu执行到此处的判断逻辑时会有毫秒的延迟)如果小于等于,则立即调用scheduledexecutorservice的schedule方法执行任务。

如果大于,把任务放到scheduledexecutorservice里面的priorityqueue(优先队列)中。priorityqueue会根据任务的延迟时间排序,延迟时间比较早的放在priorityqueue的前面。

步骤s302,执行任务;

其中,scheduledexecutorservice会一直循环,每次循环从priorityqueue中取出最前面的一个任务,并拿当前时间和该任务设置的时间比较,如果任务设置的时间大于当前时间则会立即调用schedule方法执行任务。任务执行成功后根据任务的id编号从mysql中删除保存的任务数据。

步骤s303,持久化任务;

其中,持久化是指把scheduledexecutorservice里面的priorityqueue中还未执行的任务数据存到mysql中,并为每一个任务增加一个唯一的id编号。防止当服务器宕机或者应用重启的时候还未执行的延时任务数据丢失(priorityqueue里面的数据是存在于内存中的,断电会丢失),当服务器/应用重启的时候再从mysql中读取任务数据并加载到内存中scheduledexecutorservice里面的priorityqueue中。

需要说明的是,持久化的方案也不一定非要基于mysql,持久化的目的其实是把数据放到硬盘中(保证断电不丢失数据),也可以使用sqlserver,oracle,redis,mongodb数据库等,其实是一个与数据库无关的实现方案。

可见,通过本实施的可选实施方式,当一个任务被提交的时候,把任务放到一个地方priorityqueue存起来,然后需要有一个线程不断的循环并且从priorityqueue里面取第一个任务并判断时间是否到达,如果到达立即执行这个任务,如果时间还没到则跳到下次循环。然后为了保证数据不会丢失,需要做数据持久化。

也就是说,基于scheduledexecutorservice和mysql实现延时任务的方法,可以和应用本身一起实现,只要是java应用或者mysql的都可以直接使用,不需要单独去部署服务器再去跑框架,没有其他依赖,使用起来非常方便。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。

实施例2

在本实施例中还提供了一种任务的执行装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图3是根据本发明实施例的任务的执行装置的结构框图,如图3所示,该装置包括:获取模块32,用于获取服务器的当前时间和用于指示延时执行任务的延时时间;添加模块34,与获取模块32耦合链接,用于在延时时间大于当前时间的情况下,将任务对应的任务信息添加到本地的队列中,其中,队列中的任务信息根据对应的延时时间进行排序;任务信息包括任务对应的延时时间和任务对应的任务标识;存储模块36,与添加模块34耦合链接,用于将队列中未执行的任务的任务标识对应的任务数据及任务标识存储至数据库;执行模块38,与存储模块36耦合链接,用于在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务。

可选地,本实施例中的执行模块38进一步可以包括:取出单元,用于根据排序结果从队列中取出延时时间最小的第一任务信息;第一任务信息包括第一任务延时时间和第一任务标识;第一判断单元,用于判断第一任务的延时时间是否小于或等于服务器的当前时间;执行单元,用于在判断结果为是的情况下,执行数据库中的第一任务标识对应的第一任务数据。

可选地,本实施例中的执行模块38进一步可以还可以包括:删除单元,用于在判断结果为是的情况下,删除队列中的第一任务信息。

可选地,本实施例的装置还可以包括:删除模块,用于在判断任务的延时时间是否小于或等于服务器的当前时间,根据判断结果执行任务之后,删除数据库中已执行任务的任务数据及对应的任务标识。

可选地,本实施例中的执行模块38,还可以用于设定判断周期,当判断周期到达时,判断队列中任务的延时时间是否小于或等于服务器的当前时间。

可选地,本实施例的装置还可以包括:触发模块,用于在延时时间小于或等于当前时间的情况下,触发执行与小于或等于当前时间的延时时间对应的任务。

可选地,本实施例中的获取模块32进一步可以包括:第二判断单元,用于判断任务的延时时间的格式是否为预设格式;第一提示单元,用于在判断结果为否的情况下,提示任务的延时时间的格式不正确;第二提示单元,用于在判断结果为是的情况下,提示任务的延时时间的格式正确。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

实施例3

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

s1,获取服务器的当前时间和用于指示延时执行任务的延时时间;

s2,在延时时间大于当前时间的情况下,将任务对应的任务信息添加到本地的队列中,其中,队列中的任务信息根据对应的延时时间进行排序;任务信息包括任务对应的延时时间和任务对应的任务标识;

s3,将队列中未执行的任务的任务标识对应的任务数据及任务标识存储至数据库;

s4,在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:

s1,获取服务器的当前时间和用于指示延时执行任务的延时时间;

s2,在延时时间大于当前时间的情况下,将任务对应的任务信息添加到本地的队列中,其中,队列中的任务信息根据对应的延时时间进行排序;任务信息包括任务对应的延时时间和任务对应的任务标识;

s3,将队列中未执行的任务的任务标识对应的任务数据及任务标识存储至数据库;

s4,在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


技术特征:

1.一种任务的执行方法,其特征在于,包括:

获取服务器的当前时间和用于指示延时执行任务的延时时间;

在所述延时时间大于所述当前时间的情况下,将所述任务对应的任务信息添加到本地的队列中,其中,所述队列中的任务信息根据对应的延时时间进行排序;所述任务信息包括所述任务对应的延时时间和所述任务对应的任务标识;

将所述队列中未执行的任务的任务标识对应的任务数据及所述任务标识存储至数据库;

在所述队列中所述任务的延时时间小于或等于所述服务器的当前时间的情况下,执行所述任务。

2.根据权利要求1所述的方法,其特征在于,在所述队列中所述任务的延时时间小于或等于所述服务器的当前时间的情况下,执行所述任务,包括:

根据排序结果从所述队列中取出延时时间最小的第一任务信息;所述第一任务信息包括第一任务延时时间和第一任务标识;

判断所述第一任务的延时时间是否小于或等于所述服务器的当前时间;

在判断结果为是的情况下,执行所述数据库中的第一任务标识对应的第一任务数据。

3.根据权利要求2所述的方法,其特征在于,判断所述第一任务的延时时间是否小于或等于所述服务器的当前时间;

在判断结果为是的情况下,删除所述队列中的所述第一任务信息。

4.根据权利要求1至3任一项所述的方法,其特征在于,判断所述任务的延时时间是否小于或等于所述服务器的当前时间,根据判断结果执行所述任务之后,删除所述数据库中已执行任务的任务数据及对应的任务标识。

5.根据权利要求1所述的方法,在所述队列中所述任务的延时时间小于或等于所述服务器的当前时间的情况下,执行所述任务,包括:

设定判断周期,当所述判断周期到达时,判断所述队列中所述任务的延时时间是否小于或等于所述服务器的当前时间。

6.根据权利要求1所述的方法,其特征在于,还包括:

在所述延时时间小于或等于所述当前时间的情况下,触发执行与小于或等于所述当前时间的延时时间对应的任务。

7.根据权利要求1至5任一项所述的方法,其特征在于,获取用于指示延时执行任务的延时时间,包括:

判断所述任务的延时时间的格式是否为预设格式;

在判断结果为否的情况下,提示所述任务的延时时间的格式不正确;

在判断结果为是的情况下,提示所述任务的延时时间的格式正确。

8.一种任务的执行装置,其特征在于,包括:

获取模块,用于获取服务器的当前时间和用于指示延时执行任务的延时时间;

添加模块,用于在所述延时时间大于所述当前时间的情况下,将所述任务对应的任务信息添加到本地的队列中,其中,所述队列中的任务信息根据对应的延时时间进行排序;所述任务信息包括所述任务对应的延时时间和所述任务对应的任务标识;

存储模块,用于将所述队列中未执行的任务的任务标识对应的任务数据及所述任务标识存储至数据库;

执行模块,用于在所述队列中所述任务的延时时间小于或等于所述服务器的当前时间的情况下,执行所述任务。

9.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述权利要求1至6任一项中所述的方法。

10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述权利要求1至6任一项中所述的方法。

技术总结
本发明提供了一种任务的执行方法及装置、存储介质和电子装置;其中,该方法包括:获取服务器的当前时间和用于指示延时执行任务的延时时间;在延时时间大于当前时间的情况下,将任务对应的任务信息添加到本地的队列中,其中,队列中的任务信息根据对应的延时时间进行排序;任务信息包括任务对应的延时时间和任务对应的任务标识;将队列中未执行的任务的任务标识对应的任务数据及任务标识存储至数据库;在队列中任务的延时时间小于或等于服务器的当前时间的情况下,执行任务。通过本发明,解决了相关技术中在执行延时任务的情况下需要额外部署服务器去运行导致执行延时任务的效率比较低的问题,提高了延时任务执行的效率。

技术研发人员:张飞飞
受保护的技术使用者:浙江大搜车软件技术有限公司
技术研发日:2020.01.09
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-28161.html

最新回复(0)