CN114138447A - 任务处理方法、装置、设备以及存储介质 - Google Patents

任务处理方法、装置、设备以及存储介质 Download PDF

Info

Publication number
CN114138447A
CN114138447A CN202111491719.6A CN202111491719A CN114138447A CN 114138447 A CN114138447 A CN 114138447A CN 202111491719 A CN202111491719 A CN 202111491719A CN 114138447 A CN114138447 A CN 114138447A
Authority
CN
China
Prior art keywords
task
state
batch
tasks
processed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111491719.6A
Other languages
English (en)
Inventor
陈阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202111491719.6A priority Critical patent/CN114138447A/zh
Publication of CN114138447A publication Critical patent/CN114138447A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本公开提供了一种任务处理方法、装置、设备以及存储介质,涉及计算机技术领域,尤其涉及大数据、云计算和人工智能领域。具体实现方案为:一种任务处理方法,包括:从批量任务中获取待处理任务;根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作。本公开实施例有利于针对不同的阶段执行对应的操作,能够更加灵活地处理任务。

Description

任务处理方法、装置、设备以及存储介质
技术领域
本公开涉及计算机技术领域,尤其涉及大数据、云计算和人工智能领域。
背景技术
在一些系统或平台批量导入数据时,例如在应用了人脸识别模型的系统或平台上批量导入底库图时,可以通过文件上传的方式、一次性地将多张人员注册照(即底库图)注册到人脸库中。通常,批量导入数据的方法可以采用串行导入或并行导入的方式。
发明内容
本公开提供了一种任务处理方法、装置、设备以及存储介质。
根据本公开的一方面,提供了一种任务处理方法,包括:
从批量任务中获取待处理任务;
根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作。
根据本公开的另一方面,提供了一种任务处理装置,包括:
获取模块,用于从批量任务中获取待处理任务;
处理模块,用于根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作。
根据本公开的再一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被所述至少一个处理器执行,以使该至少一个处理器能够执行上述的方法。
根据本公开的再一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行上述的方法。
根据本公开的再一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述的方法。
在本公开实施例中,根据批量任务的状态对批量任务中的待处理任务执行该批量任务所处阶段对应的操作,有利于针对不同的阶段执行对应的操作,能够更加灵活地处理任务。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开一实施例的任务处理方法的流程示意图;
图2是根据本公开另一实施例的任务处理方法的流程示意图;
图3是根据本公开另一实施例的任务处理方法的流程示意图;
图4是根据本公开另一实施例的任务处理方法的流程示意图;
图5是根据本公开另一实施例的任务处理方法的流程示意图;
图6是根据本公开另一实施例的任务处理方法的流程示意图;
图7是根据本公开另一实施例的任务处理方法的流程示意图;
图8是根据本公开另一实施例的任务处理方法的流程示意图;
图9是根据本公开一实施例的任务处理装置的结构示意框图;
图10是根据本公开另一实施例的任务处理装置的结构示意框图;
图11是根据本公开另一实施例的任务处理装置的结构示意框图;
图12是根据本公开另一实施例的任务处理装置的结构示意框图;
图13是根据本公开实施例的二阶段并行导入方案的系统结构示意图;
图14是用户上传文件的示例的流程示意图;
图15是工作线程功能的一个示例的流程示意图;
图16是工作线程功能的另一个示例的流程示意图;
图17示出用来实施本公开的实施例的示例电子设备的示意性框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本公开一实施例的任务处理方法的流程示意图。该方法可以包括:
S101、从批量任务中获取待处理任务;
S102、根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作。
在本公开实施例中,批量任务可以包括多个待处理任务,每次可以从批量任务中获取一个待处理任务。例如,任务接收线程(也可以称为服务线程)可以将批量任务中的一部分待处理任务加入任务队列,加入任务队列的待处理任务的数量由任务队列的长度来确定。线程池中的工作线程可以从任务队列中依次读取待处理任务。线程池中可以包括多个工作线程,运行多个工作线程可以支持并发地处理任务,提高批量任务的处理速度。
在本公开实施例中,可以采用多种方式记录批量任务的状态。例如,通过分布式缓存例如Redis(Redis Remote Dictionary Server,远程字典服务)等记录批量任务的状态。工作线程从任务队列中读取待处理任务后,可以在Redis中查找记录获取批量任务的状态。然后工作线程根据该批量任务的状态,对自己负责的待处理任务执行该批量任务所处阶段对应的操作。
在本公开实施例中,批量任务的状态可以包括多种,根据批量任务的处理进度可能有所改变。批量任务的状态与批量任务的阶段可能具有一定的关系。例如,批量任务的状态可以从正在导入的状态变为准备提交的状态。批量任务的阶段可以包括第一阶段和第二阶段,第一阶段可以为导入阶段,第二阶段可以为提交阶段。将批量任务包括的所有待处理任务都执行导入操作后,批量任务的状态可以从正在导入的状态变为准备提交的状态,相应地,批量任务的阶段也可以从导入阶段进入了提交阶段。在导入阶段,如果用户需要撤销,可以支持回滚操作,将已导入的数据清除。
在本公开实施例中的任务处理方法,根据批量任务的状态对批量任务中的待处理任务执行该批量任务所处阶段对应的操作,有利于针对不同的阶段执行对应的操作,能够更加合理和灵活地处理任务。
图2是根据本公开另一实施例的任务处理方法的流程示意图。该实施例的业务处理方法可以包括上述方法实施例的一个或多个特征。在一种实施方式中,根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作,包括:在该批量任务处于第一状态的情况下,执行以下操作的至少之一:
S201、对该待处理任务执行第一阶段操作;
S202、在第一次查看的情况下,对该待处理任务执行第一阶段操作;
S203、在第二次查看的情况下,结束工作线程;
其中,该第一状态用于表示该批量任务处于导入过程中;该第一阶段操作包括将该待处理任务的数据导入为中间态数据。
在本公开实施例中,第一状态可以通过“导入中”、“正在导入”、“导入过程中”、“1”、“A”等信息来表示,不限定具体的表示形式。第一阶段操作即导入操作后得到的任务的中间态数据,可以表示已经写入到系统中、但暂时还不对用户展示的有效数据。所写入的系统可以包括各种类型的数据库,例如用于支持人脸识别模型的人脸底库。
例如,工作线程查看批量任务的状态,发现批量任务处于第一状态、即导入过程中,可以对该工作线程的待处理任务执行第一阶段操作、即将该工作线程的待处理任务的数据导入为中间态数据。
再如,工作线程可以多次查看批量任务的状态。如果工作线程第一次发现批量任务处于导入过程中,可以将该工作线程的待处理任务的数据导入为中间态数据。
再如,如果工作线程第二次查看发现批量任务处于导入过程中,表示该工作线程已经对自己负责的待处理任务执行了导入操作,并且不需要进行提交或撤销等操作,可以结束该工作线程。此外,如果工作线程第二次查看发现批量任务的所有待处理任务已经导入结束,可以改变批量任务的状态。例如,从导入过程中的状态改成待提交的状态。
通过表示批量任务处于导入过程中的第一状态,可以在正常的导入过程中将待处理任务的数据导入为中间态数据,中间态数据不是最终数据,有利支持其他灵活需求例如撤回。
图3是根据本公开另一实施例的任务处理方法的流程示意图。该实施例的业务处理方法可以包括上述方法实施例的一个或多个特征。在一种实施方式中,根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作,包括:
S301、在该批量任务处于第二状态的情况下,对该待处理任务执行第二阶段操作;
其中,该第二状态用于表示该批量任务已经全部执行了第一阶段操作;该第二阶段操作包括将该批量任务中成功导入的该待处理任务的中间态数据提交为完成态数据。
在本公开实施例中,第二状态可以通过“待提交”、“正在提交”、“提交中”、“2”、“B”等信息来表示,不限定具体的表示形式。
在本公开实施例中,第一阶段操作可能导入成功,也可以导入失败。例如,批量任务包括200个导入任务,利用工作线程对每个任务都执行一次导入操作,总计执行200次导入操作,则可以认为该批量任务中的待处理任务已经全部执行了第一阶段操作。再如,可以设置一些容错机制,有些任务第一次执行导入不成功,可以重试一次或多次,直到判定为导入成功或失败再记录这次导入操作执行完毕。然后根据统计结果,确定批量任务中的待处理任务是否已经全部执行了第一阶段操作。
示例性地,工作线程在第一次和/或第二次查看批量任务的状态的情况下,如果发现批量任务处于用于表示批量任务已经全部执行了第一阶段操作的第二状态,可以将成功导入的任务的中间态数据变成完成态(或称为终态)数据。提交完成后,工作线程可以将批量任务的状态改变为用于表示已经完成提交的状态。
通过批量任务的第一状态和第二状态,实现分阶段导入任务的数据,结合中间态数据和完成态数据,有利于支持其他灵活需求例如撤回。
图4是根据本公开另一实施例的任务处理方法的流程示意图。该实施例的业务处理方法可以包括上述方法实施例的一个或多个特征。在一种实施方式中,根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作,还包括:
S401、在该批量任务处于第三状态的情况下,执行回滚操作,其中,该第三状态用于表示该批量任务处于导入过程中收到撤销请求。
在本公开实施例中,第三状态可以通过“撤销中”、“正在撤销”、“正在回滚”、“撤销过程中”、“3”、“C”等信息来表示,不限定具体的表示形式。
示例性地,工作线程在第一次和/或第二次查看批量任务的状态的情况下,如果发现批量任务处于用于表示该批量任务处于导入过程中收到撤销请求的第三状态,可以停止导入自己负责的待处理任务,而是执行回滚操作,清除已经导入的中间态数据。针对撤销请求执行回滚操作,可以清除已经导入的数据,避免遗留未成功导入的批量任务的数据,节约存储空间。
在一种实施方式中,该执行回滚操作包括:发送用于表示已经撤销导入的通知,清除已经导入的中间态数据。
示例性地,在可以在清除已经导入的中间态数据之前,先向用户端例如通过服务线程向用户设备发送已撤销的通知。由于中间态数据对用户是不可见的。因此,提前通知用户已撤销,异步地进行清除,有利于减少交互等待时间,提高用户体验。
图5是根据本公开另一实施例的任务处理方法的流程示意图。该实施例的业务处理方法可以包括上述方法实施例的一个或多个特征。在一种实施方式中,根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作,还包括:
S501、在该批量任务处于第四状态或第五状态的情况下,结束工作线程,其中,该第四状态用于表示该批量任务已经完成提交;该第五状态用于表示该批量任务的由于撤销而终止。
在本公开实施例中,第四状态可以通过“已完成”、“已提交完成”、“4”、“D”等信息来表示,不限定具体的表示形式。第五状态可以通过“已终止”、“撤销完成”、“5”、“E”等信息来表示,不限定具体的表示形式。第四状态和第五状态可以采用不同的信息来表示,也可以采用相同的信息来表示。
示例性地,工作线程在第一次和/或第二次查看批量任务的状态的情况下,如果发现批量任务处于用于表示该批量任务已经完成的第四状态或表示该批量任务已终止的第五状态,可以结束工作线程。通过表示批量任务已完成或已终止的状态来控制工作线程的结束,可以及时释放工作线程,以便于快速执行其他任务,提高执行效率。
图6是根据本公开另一实施例的任务处理方法的流程示意图。该实施例的业务处理方法可以包括上述方法实施例的一个或多个特征。在一种实施方式中,该方法还包括:
S601、对该批量任务进行状态维护。
在一种实施方式中,S601对该批量任务进行状态维护具体包括:在执行该第一阶段操作的情况下,更新导入成功的第一数目和/或导入失败的第二数目;在根据该第一数目和/或该第二数目确定已处理任务量达到该批量任务的总数的情况下,将该批量任务的第一状态更新为第二状态。其中,该第一状态用于表示该批量任务处于导入过程中,该第二状态用于表示该批量任务已经全部执行了第一阶段操作。
例如,导入成功的第一数目和/或导入失败的第二数目,可以分别使用一个单独的键(key),以字符型数据格式保持在Redis中。工作线程在进行个数加1的操作时,使用原子性累加命令(incr)对第一数目和/或第二数目的键进行累加。这样,有利于在高并发情况下保证数值的正确。
在一种实施方式中,S601对该批量任务进行状态维护具体包括:在执行第二阶段操作的情况下,将该批量任务的第二状态更新为第四状态,该第四状态用于表示该批量任务已经完成提交。
在一种实施方式中,S601对该批量任务进行状态维护具体包括:在执行回滚操作的情况下,将该批量任务的第三状态更新为第五状态,其中,该第三状态用于表示该批量任务处于导入过程中收到撤销请求,该第五状态用于表示该批量任务的由于撤销而终止。
上述对批量任务进行状态维护的方式可以根据批量任务的状态不同而采用其中一种或者多种,具体可以根据实际需求灵活选择。通过对批量任务进行状态维护,可以确定批量任务当前所处的状态,从而及时准确地进行相应操作,提高任务处理速度。
在一种实施方式中,该批量任务的不同状态具有不同开关标识。
示例性地,批量任务具有多种不同状态,例如上述实施例中的第一状态、第二状态、第三状态、第四状态、第五状态。不同状态可以具有不同的开关标志。例如第一状态的开关标识为key1,第二状态的开关标识为key2,第三状态的开关标识为key3,第一状态的开关标识为key4,第五状态的开关标识为key5。每个开关标识可以通过不同的值表示开或者关。例如,开关标志的值为1表示开,0表示关。再如,开关标志的值为0表示开,1表示关。开关标识还可以称为开关、开关标志或开关量等。通过不同的开关标识可以确定批量任务的不同状态的有效性。
在一种实施方式中,每个该开关标识的值允许从第一值修改为第二值。例如,第一值为0,第二值为1。再如,第一值为1,第二值为0。第一值和第二值也可以采用其他值,只要第一值与第二值不同即可。
每个该开关标识的值可以默认为第一值。如果某个状态对应的开关标识满足改变的条件,工作线程可以将这个状态的开关标识从第一值修改为第二值。例如,批量任务的状态为正在撤销,工作线程可以将正在撤销状态的开关标识从第一值修改为第二值。
在一种实施方式中,每个该开关标识的值不允许反向修改。
通过设置开关标识的值的单向修改,有利于保证开关状态的准确性,尤其适用于高并发状态下对开关标识的频繁操作。
在一种实施方式中,该批量任务的状态具有优先级,在多个不同的状态对应的开关标识的值相同的情况下,按照优先级确定有效状态。例如,优先级从高到低依次为第四状态、第五状态、第三状态、第二状态、第一状态。如果第三状态的key3=1且第二状态的key=1,则可以判定为当前的有效状态为第三状态,即处于正在撤销的过程中。通过设置批量任务的不同状态的优先级高低,有利于在多个不同的状态对应的开关标识的值相同的情况下,准确地确定批量任务的有效状态。
本公开实施例的批量任务的状态仅是示例,而非限制,在实际应用中,可以根据批量任务的不同需求,灵活增加或减少。例如,还可以根据需求设置开始状态、中止状态、停止状态等。
图7是根据本公开另一实施例的任务处理方法的流程示意图。该实施例的业务处理方法可以包括上述方法实施例的一个或多个特征。在一种实施方式中,S101从批量任务中获取待处理任务,包括:
S1011、利用需要导入的文件和图像,生成该批量任务的每个该待处理任务;
S1012、将多个该待处理任务加入任务队列;
S1013、利用线程池中的多个工作线程,从该任务队列中读取该待处理任务。
例如,需要导入的文件可以包括excel表格。excel表格可以包括需要导入的各种信息。需要导入的图像和需要导入的文件可以具有关联关系。例如,在需要导入的文件中有一列包括需要导入的图像的名称或其他标识。
在一种实施方式中,该方法还包括:上传该待处理任务中的需要导入的图像;接收该上传该待处理任务中的需要导入的图像的存储路径。例如,该存储路径可以是URL(Uniform Resource Locator,统一资源定位符)链接地址。上传图像的步骤和解析待处理文件得到人员信息的步骤可以异步地执行,不限制时序,从而有利于合理地安排并行处理的内容,以加快任务处理进度。
例如,服务线程解析需要导入的文件可以得到需要导入的人员信息和图像的标识,并且将需要导入的图像上传到网络服务器例如云服务器,接收云服务器返回的图像的标识及其对应的图像的存储路径。然后服务线程可以将需要导入的人员信息、需要导入的图像的标识和需要导入的图像的存储路径生成待处理任务。如果有N条需要导入的人员信息,可以生成N个待处理任务。然后根据任务队列的大小,可以将批量任务中部分待处理任务加入任务队列。如果任务队列的大小为S,且S大于或等于N,可以将S个待处理任务全部加入任务队列。如果任务队列的大小为M,且M小于N,可以将N个待处理任务中的M个待处理任务加入任务队列,并且如果工作线程取走一个待处理任务,可以继续向任务队列加入新的待处理任务。如果线程池中有T个工作线程,可以分别从任务队列读取T个待处理任务,并发地进行处理。
通过任务队列和线程池中的多个工作线程,可以并发地处理任务,提高任务处理速度。
在一种实施方式中,每个该待处理任务包括需要导入的人员信息、需要导入的图像的标识和需要导入的图像的存储路径中至少之一。在待处理任务中包括需要导入的人员信息、图像的标识和图像的存储路径,可以减少待处理任务包括的信息量,便于加入任务队列进行处理,提高处理速度。
在一种实施方式中,该人员信息和图像标识是从需要导入的文件中解析得到的;该需要导入的图像的存储路径包括在上传该需要导入的图像后收到的统一资源定位符。通过上传图像后的统一资源定位符,有利于对图像进行异步地处理,加快整体的数据导入速度。
在一种实施方式中,该方法还包括:
S701、根据该待处理任务中的需要导入的图像的存储路径,下载该需要导入的图像;
S702、将需要导入的人员信息和需要导入的图像关联。
在本公开实施例中,S701和S702可以认为是第一阶段操作的一部分,也可以认为是第一阶段操作之前的准备步骤,具体可以根据实际应用的需求灵活设置。通过图像的存储路径下载需要导入的图像,可以下载已经上传的图像,从而关联地导入更加完整的数据。
图8是根据本公开另一实施例的任务处理方法的流程示意图。该实施例的业务处理方法可以包括上述方法实施例的一个或多个特征。在一种实施方式中,该方法还包括:
S801、对该待处理任务的输入信息进行检测,确定错误类型;
S802、根据该错误类型,对该输入信息执行对应处理。
在本公开实施例中,S801和S802可以认为是第一阶段操作的一部分,也可以认为是第一阶段操作之前的准备步骤,具体可以根据实际应用的需求灵活设置。对待处理任务的输入信息进行错误检测后,如果没有问题,可以执行正常的导入。如果检测出错误,可以根据错误类型灵活地进行处理,从而提高所导入数据的准确性。
在一种实施方式中,该根据该错误类型,对该输入信息执行对应处理,包括以下至少之一:
在该错误类型为第一类错误且该输入信息为第一类信息的情况下,记录为导入失败;
在该错误类型为第一类错误且该输入信息为第二类信息的情况下,将该待处理任务的错误信息置空后提交到线程池进行重试;
在该错误类型为第二类错误的情况下,将该待处理任务提交到线程池进行重试。
示例性地,第一类错误可以包括输入信息的不合法导致的错误,例如头像质量不合格、字段不符合规则等。第二类错误可以包括服务端内部错误,例如网络波动、服务过载等。对于第一类错误,根据业务需要,如果是必要信息不合法(如头像),则工作线程可以判为导入失败。如果是非必要信息,则工作线程可以将不合法的信息置换成空值,然后返回任务队列进行重试。第二类错误往往具有偶发性,也可以返回任务队列进行重试。需要重试的任务返回任务队列后,再次执行该需要重试的任务的工作线程和之前的工作线程可以相同,也可以不同。按照不同的错误类型,进行重试或记录,有利于合理地修正错误,更加准确并快速地处理任务。
图9是根据本公开一实施例的任务处理装置的结构示意框图。该装置可以包括:
获取模块901,用于从批量任务中获取待处理任务;
处理模块902,用于根据该批量任务的状态,对该待处理任务执行该批量任务所处阶段对应的操作。
在本公开实施例中的任务处理装置,根据批量任务的状态对批量任务中的待处理任务执行该批量任务所处阶段对应的操作,有利于针对不同的阶段执行对应的操作,能够更加合理和灵活地处理任务。
图10是根据本公开另一实施例的任务处理装置的结构示意框图。该实施例的业务处理装置可以包括上述装置实施例的一个或多个特征。在一种实施方式中,该处理模块902包括:
第一处理子模块9021,具体用于在该批量任务处于第一状态的情况下,执行以下操作的至少之一:
对该待处理任务执行第一阶段操作;
在第一次查看的情况下,对该待处理任务执行第一阶段操作;
在第二次查看的情况下,结束工作线程;
其中,该第一状态用于表示该批量任务处于导入过程中;该第一阶段操作包括将该待处理任务的数据导入为中间态数据。
通过表示批量任务处于导入过程中的第一状态,可以在正常的导入过程中将待处理任务的数据导入为中间态数据,中间态数据不是最终数据,有利支持其他灵活需求例如撤回。
在一种实施方式中,该处理模块902包括:
第二处理子模块9022,具体用于在该批量任务处于第二状态的情况下,对该待处理任务执行第二阶段操作;其中,该第二状态用于表示该批量任务已经全部执行了第一阶段操作;该第二阶段操作包括将该批量任务中成功导入的该待处理任务的中间态数据提交为完成态数据。通过批量任务的第一状态和第二状态,实现分阶段导入任务的数据,结合中间态数据和完成态数据,有利于支持其他灵活需求例如撤回。
在一种实施方式中,该处理模块902包括:
第三处理子模块9023,具体用于在该批量任务处于第三状态的情况下,执行回滚操作,其中,该第三状态用于表示该批量任务处于导入过程中收到撤销请求。针对撤销请求执行回滚操作,可以清除已经导入的数据,避免遗留未成功导入的批量任务的数据,节约存储空间。
在一种实施方式中,该执行回滚操作包括:发送用于表示已经撤销导入的通知,清除已经导入的中间态数据。提前通知用户已撤销,异步地进行清除,有利于减少交互等待时间,提高用户体验。
在一种实施方式中,该处理模块902包括:
第四处理子模块9024,具体用于在该批量任务处于第四状态或第五状态的情况下,结束工作线程,其中,该第四状态用于表示该批量任务已经完成提交;该第五状态用于表示该批量任务的由于撤销而终止。通过表示批量任务已完成或已终止的状态来控制工作线程的结束,可以及时释放工作线程,以便于快速执行其他任务,提高执行效率。
在一种实施方式中,该装置还包括:状态维护模块1001,用于对该批量任务进行状态维护,具体用于执行以下至少之一:
在执行该第一阶段操作的情况下,更新导入成功的第一数目和/或导入失败的第二数目;在根据该第一数目和/或该第二数目确定已处理任务量达到该批量任务的总数的情况下,将该批量任务的第一状态更新为第二状态,其中,该第一状态用于表示该批量任务处于导入过程中,该第二状态用于表示该批量任务已经全部执行了第一阶段操作;
在执行第二阶段操作的情况下,将该批量任务的第二状态更新为第四状态,该第四状态用于表示该批量任务已经完成提交;
在执行回滚操作的情况下,将该批量任务的第三状态更新为第五状态,其中,该第三状态用于表示该批量任务处于导入过程中收到撤销请求,该第五状态用于表示该批量任务的由于撤销而终止。
通过对批量任务进行状态维护,可以确定批量任务当前所处的状态,从而及时准确地进行相应操作,提高任务处理速度。
在一种实施方式中,该获取模块901,具体用于:利用需要导入的文件和图像,生成该批量任务的每个该待处理任务;将多个该待处理任务加入任务队列;利用线程池中的多个工作线程,从该任务队列中读取该待处理任务。通过任务队列和线程池中的多个工作线程,可以并发地处理任务,提高任务处理速度。
在一种实施方式中,每个该待处理任务包括需要导入的人员信息、需要导入的图像的标识和需要导入的图像的存储路径中至少之一。在待处理任务中包括需要导入的人员信息、图像的标识和图像的存储路径,可以减少待处理任务包括的信息量,便于加入任务队列进行处理,提高处理速度。
在一种实施方式中,该人员信息和图像标识是从需要导入的文件中解析得到的;该需要导入的图像的存储路径包括在上传该需要导入的图像后收到的统一资源定位符。通过上传图像后的统一资源定位符,有利于对图像进行异步地处理,加快整体的数据导入速度。
图11是根据本公开另一实施例的任务处理装置的结构示意框图。该实施例的业务处理装置可以包括上述装置实施例的一个或多个特征。在一种实施方式中,该装置还包括:
下载模块1101,用于根据该待处理任务中的需要导入的图像的存储路径,下载该需要导入的图像;
关联模块1102,用于将需要导入的人员信息和需要导入的图像关联。
通过图像的存储路径下载需要导入的图像,可以下载已经上传的图像,从而关联地导入更加完整的数据。
在一种实施方式中,该批量任务的不同状态具有不同开关标识。通过不同的开关标识可以确定批量任务的不同状态的有效性。
在一种实施方式中,每个该开关标识的值允许从第一值修改为第二值。
在一种实施方式中,每个该开关标识的值不允许反向修改。
通过设置开关标识的值的单向修改,有利于保证开关状态的准确性,尤其适用于高并发状态下对开关标识的频繁操作。
在一种实施方式中,该批量任务的状态具有优先级,在多个不同的状态对应的开关标识的值相同的情况下,按照优先级确定有效状态。通过设置批量任务的不同状态的优先级高低,有利于在多个不同的状态对应的开关标识的值相同的情况下,准确地确定批量任务的有效状态。
图12是根据本公开另一实施例的任务处理装置的结构示意框图。该实施例的业务处理装置可以包括上述装置实施例的一个或多个特征。在一种实施方式中,该装置还包括:
检测模块1201,用于对该待处理任务的输入信息进行检测,确定错误类型;
错误处理模块1202,用于根据该错误类型,对该输入信息执行对应处理。
在本公开实施例中,检测模块对待处理任务的输入信息进行错误检测后,如果没有问题,可以执行正常的导入。如果检测出错误,错误处理模块可以根据错误类型灵活地进行处理,从而提高所导入数据的准确性。
在一种实施方式中,该错误处理模块1201,还用于执行以下至少之一:
在该错误类型为第一类错误且该输入信息为第一类信息的情况下,记录为导入失败;
在该错误类型为第一类错误且该输入信息为第二类信息的情况下,将该待处理任务的错误信息置空后提交到线程池进行重试;
在该错误类型为第二类错误的情况下,将该待处理任务提交到线程池进行重试。按照不同的错误类型,进行重试或记录,有利于合理地修正错误,更加准确并快速地处理任务。
本公开的业务处理装置的各模块的具体功能和示例的描述,可以参见上述业务处理方法实施例中对应步骤的相关描述,在此不再赘述。
在一种具体示例中,在应用了人脸识别模型的系统或平台上,通过文件上传的方式、一次性地将多张底库图例如人员注册照注册到人脸库中。当前人脸识别技术应用广泛,可能需要一次将大量的信息导入到库中,并从云端下发给所需的设备,或者直接提供在线的人脸识别能力。导入人脸底库需要保证导入的数据量和导入速度,保证“双写一致性”和“人脸唯一性”。
“双写”可以包括将人员注册照写入到人脸模型的人脸库,并且也将人员信息及注册照保存地址写入到数据库。“双写一致性”可以包括写入到数据库和人脸库中的人员信息保持一致。“人脸唯一性”可以包括导入到人脸库中的人脸与人员信息是一一对应的。同一个人的头像在人脸库中不能被当成两个人注册。另外,通过提供UI(User Interface,用户界面),可以让用户实时得知导入的进度,以及随时可以撤销。
如果采用串行导入的方式,在导入每张图像之前先在人脸库中检索,以确保同一个人不会在人脸库中多次注册成功。这种方式适用于设备端管理系统、或私有化人脸识别系统的人脸底库导入,有利于保证一致性。但是需要限制进行中的批量导入任务数量,因为多个批量导入任务会产生拥堵。所以不适用于并发量、数据量都比较大的云端平台场景。
如果采用并行导入,将文件目录下的图像拆分成很多个单个图像注册任务,并行地去执行。可以发挥多核CPU的高性能,提升批量导入的速度。并行导入在吞吐量和导入速度上都比较有优势。但是由于将一个批量任务拆成了许多个原子性的子任务,在导入过程中如果用户选择撤销,需要考虑如何将已经提交的子任务进行回滚,将已经导入的人员底库撤销。
本公开实施例提供一种二阶段并行导入方案,以并行导入为基础,采用了二阶段提交的方式,将整个批量导入任务(可以简称批量任务)变成一个个原子性的事务。这里的事务可以不是真实的数据库事务,而可以理解为整个批量导入任务具备了事务的原子性和一致性。本公开实施例可以支持整体撤销,通过并行导入充分发挥多核CPU的性能,在吞吐量和导入速度上有着很大的优势。示例性地,该二阶段并行导入方案可以用于在云端场景下快速导入大批量人脸底库。
例如,该二阶段并行导入方案将整个导入流程分成了两个阶段:导入(Import)和提交(Submit)。如图13所示,用户在UI界面可以选择导入或撤销操作。任务接收线程(也可以称为服务线程)与UI界面交互,可以响应于用户的导入,将批量任务的一部分加入任务队列。在导入阶段,使用工作线程池的多个工作线程并行地进行单个图像的注册,并且这阶段导入的数据处于一种中间态。等到全部图像都已被导入后,才进入提交阶段。这时,系统可以一次性地将所有的中间态数据变成终态,整个批量导入任务才真正完成。在导入和提交过程中,可以通过例如Redis来记录任务状态、导入成功个数、导入失败个数等。
如图14所示,本示例中,用户上传文件的流程可以包括以下步骤:
S1401.用户可以通过UI界面上传批量导入人脸底库的压缩文件,可以通过压缩包分片上传来实现。压缩包可以包含图像例如人员注册照和人员信息例如保存在Excel文件中。
S1402.服务端(或称为服务器)创建一个批量任务,对压缩包进行解压,得到需要上传的图像。
S1403.异步上传图像,上传成功后可以收到图像的存储路径。
S1404.扫描解压文件目录并解析待处理文件例如Excel文件,Excel文件的某一列可以保存每个人员信息关联的图像的标识例如图像名。
S1405.Redis生成批量任务记录,其中,可以包括批量任务的各个状态和导入成功和/或失败的数目等。
S1406.批量提交待处理任务例如头像注册任务到工作线程池。代理处理任务中可以包括人员信息、图像的标识和图像的存储路径。
S1407.返回任务标识(ID)。
如果用户通过UI界面进行了撤销操作,则修改批量任务的状态为“正在撤销”。
如图15所示,工作线程的一种示例性流程包括:
在异步任务开始(S1501)后,工作线程查看任务状态(S1502)。例如,工作线程可以在Redis的记录中查看任务状态,任务状态可以包括多种,例如开始(通过0表示)、导入中(通过1表示,也可以称为正在导入等)、待提交(通过2表示)、已完成(通过3表示)、撤销(通过-1表示,或者正在撤销等)、已终止(通过-2表示)等。如果工作线程查看的批量任务的状态为“导入中”,可以执行事务,中间态成员记录后(S1503),执行入库操作(S1504)。然后更新任务进度(S1505)。如果已导入全部,将Redis中批量任务的状态更改为“待提交”。如果工作线程可以查看Redis中批量任务的状态,发现批量任务的状态是“待提交”,说明第一阶段(Import)已完成,可以进行异步提交(S1506),更改成员记录为最终态(S1507),发送变更消息(S1508)。并且,可以更新批量任务的状态为“已完成”。如果用户撤销导入,Redis中批量任务的状态可以更新为“撤销”,说明用户通过UI界面进行了撤销操作,可以异步回滚(S1509),删除已入库的中间态记录(S1510),并且,更新状态为“已终止”。
如图16所示,工作线程的另一种示例性流程可以包括:
S1601.工作线程先查看一次批量任务的最新状态,根据状态值触发不同的动作:如果是“正在导入(导入中)”可以执行导入任务。如果当前任务状态为“已完成”或“已终止”,说明此批量任务已结束(正常完成或撤销终止),可以直接到S1607结束。
S1602.工作线程对图像进行格式校验和人脸质量等检测,无法通过校验的图像作为失败样本计数。
S1603.工作线程将人员信息写入数据库,再使用数据库生成的人员标识(ID)将图像例如头像注册到人脸底库(可以简称人脸库)。
S1604.工作线程更新批量任务信息,更新成功个数。例如,将成功个数加1。
S1605.工作线程再次查看批量任务的最新状态,根据不同的状态值触发不同的步骤:
(1)如果前任务状态为“待提交”,说明第一阶段(Import)已完成,则进行“提交”操作,然后更新状态为“已完成”。可以根据人员数量来确定第一阶段是否已经完成,如果Redis中的导入成功个数+导入失败个数=总数,可以表示第一阶段已经完成。
(2)如果前任务状态为“正在撤销”,说明用户通过UI界面进行了撤销操作,则进行“回滚”操作,将已经写入的数据清除,然后更新状态为“已终止”。
(3)如果前任务状态为“正在导入”、“已完成”或“已终止”,直接到步骤S1607结束。例如,总共有64个工作线程,前63个线程结束,第64个线程提交。
S1606.工作线程的任一步骤发生错误,可以重新提交到线程池进行重试。
S1607.工作线程执行结束。
本公开实施例中,用户撤销时,可以将已经导入的数据回滚。例如,通过中间态数据可以实现回滚。中间态数据可以为已经写入到系统中、但暂时还不能对用户展示的有效数据。在第一阶段即导入(Import)阶段中所有成功写入到系统中的人员底库及其他信息,都处于中间态。在整个批量导入任务完成之前,这些已导入成功的人员可以是不可见的,用户在UI界面上看不到中间态数据,也无法对中间态数据进行操作。但是中间态数据也是“有效”的,因此这些中间态数据虽然对用户是不可见的,但是在业务上属于已经写入成功。数据库或人脸库中相关的数据限制规则(例如,如人脸唯一性、数据库唯一索引)对中间态数据来说均有效,这样可以保证数据的一致性。
当用户通过UI界面进行撤销操作时,由于中间态数据对用户本身是不可见的,无需耗时地进行数据回滚。所以在用户视角中,撤销操作几乎是瞬间完成的。当然,仍然需要清除中间态数据,以释放资源(例如存储空间和数据唯一限制)。中间态数据的清除可以异步地去完成,不占用用户交互的宝贵时间,保障了用户体验。例如,用户指示撤销后,服务线程可以先通过UI界面先向用户回复已撤销,然后通过工作线程清理已经导入的数据,用户无需等待撤销成功后再收到消息。具体例如,用户导入的批量任务包括1万个待处理任务,导入5千个待处理任务之后收到了用户的撤销指示,可以先回复已撤销成功,然后通过一个工作线程清理已经导入的5千个任务的数据。
本公开实施例可以提高吞吐量。为了使系统能够支持多个上万规模的批量导入任务同时进行,本公开实施例采用多线程任务队列的方式。在任务开始时,扫描用户上传的文件解压目录,将目录下的每一张图像都作为一个人像注册任务提交到线程池的任务队列,由线程池分配任务给线程池里的所有工作线程并行执行。这样即使有多个批量导入任务同时到来,也都会像这样被拆成一个个子任务(即待处理任务)在任务队列中排队。每一个子任务携带的信息包括一张图像的文件路径,占用内存空间非常小,因此可以把任务队列的长度设置得很大,以容纳大量的子任务。另外,线程池中的工作线程数也具有弹性伸缩性,在任务堆积时可以开启更多的线程进行工作,从而实现比较高的吞吐量。
本公开实施例对高并发下的任务状态进行维护。由于批量任务完成前需要频繁地更改,可以使用分布式缓存Redis进行任务信息维护,待任务完成后再写入数据库。需要维护的任务信息包括任务状态、导入成功的人员个数、导入失败的人员个数等。本公开实施例采用并行的方式,会有多个工作线程频繁地进行修改。
本公开实施例缓存中的数据格式与存储方式,有利于确保了数据的一致,并且性能高。例如,导入成功/失败的人员个数,分别使用一个单独的key,以字符型数据格式保持在Redis中。工作线程在进行个数加1的操作时,直接使用Redis原生的原子性累加命令(incr)。这样在高并发情况下也能够保证数值的正确,不会出现“丢失”。
本公开实施例中缓存中的任务状态可以分别具有对应的开关标识。例如,批量任务的状态包括“开始”、“正在导入”、“待提交”、“已完成”、“正在撤销”、“已终止”等。在数据库中可以使用一个字段进行保存。如果在缓存中也使用一个字段来保存状态值且工作线程使用覆盖的方式进行状态修改,则在并发工况下由于线程调度执行顺序的不确定性,可能出现“新状态被旧状态覆盖”。本公开实施例可以采用多个存储开关量的键(key),作为不同状态的开关标识。工作线程中对状态的修改,可以包括将对应状态的值从初始的例如“0”置位例如“1”,而不能反向修改。这样可以保证所有状态的修改不会被其他状态所覆盖。并且,对不同的状态设置优先级,如果有多个状态都被置“1”,可以根据状态的优先级来确定任务的真正状态。例如,优先级从高到低依次为“已完成”、“已终止”、“正在撤销”、“待提交”、“正在导入”、“开始”。假如“正在撤销”和“正在导入”的值都为“1”,根据优先级,当前任务的状态是“正在撤销”。
本公开实施例可以提高容错性能。本公开实施例采用异步并行的技术,需要考虑异步并行导入过程中可能出现的各种错误对结果的影响。例如,网络波动造成的链接中断、人员信息字段的不合法、人脸模型负载过重等都会造成程序执行出错。本公开实施例可以将错误类型分为了两类,一类是输入信息的不合法导致的错误,如头像质量不合格、字段不符合规则等;另一类属于服务端内部错误,比如网络波动、服务过载等。对于第一类错误,根据业务需要,如果是必要信息不合法(如图像),则可以直接判为导入失败。如果是非必要信息,则将不合法的信息置换成空值,然后进行重试。第二类错误往往具有偶发性,也可以进行重试。
本公开实施例能极大地提升批量导入底库图的数据规模、导入速度和并发量,保证数据的一致性。满足了线上多用户导入大量数据和随时能够撤销的需求,有力地支持了人脸识别管理等系统在各个场景的实际应用。目前应用在真实的线上系统中,可以将单次导入图像的数量规模提升到50000,导入速度与串行导入相比可以提高400%~500%。
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图17示出了可以用来实施本公开的实施例的示例电子设备1700的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图17所示,设备1700包括计算单元1701,其可以根据存储在只读存储器(ROM)1702中的计算机程序或者从存储单元1708加载到随机访问存储器(RAM)1703中的计算机程序,来执行各种适当的动作和处理。在RAM 1703中,还可存储设备1700操作所需的各种程序和数据。计算单元1701、ROM 1702以及RAM 1703通过总线1704彼此相连。输入/输出(I/O)接口1705也连接至总线1704。
设备1700中的多个部件连接至I/O接口1705,包括:输入单元1706,例如键盘、鼠标等;输出单元1707,例如各种类型的显示器、扬声器等;存储单元1708,例如磁盘、光盘等;以及通信单元1709,例如网卡、调制解调器、无线通信收发机等。通信单元1709允许设备1700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元1701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1701的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1701执行上文所描述的各个方法和处理,例如一种任务处理方法。例如,在一些实施例中,一种任务处理方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1702和/或通信单元1709而被载入和/或安装到设备1700上。当计算机程序加载到RAM 1703并由计算单元1701执行时,可以执行上文描述的一种任务处理方法的一个或多个步骤。备选地,在其他实施例中,计算单元1701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行一种任务处理方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入、或者触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (20)

1.一种任务处理方法,包括:
从批量任务中获取待处理任务;
根据所述批量任务的状态,对所述待处理任务执行所述批量任务所处阶段对应的操作。
2.根据权利要求1所述的方法,其中,根据所述批量任务的状态,对所述待处理任务执行所述批量任务所处阶段对应的操作,包括:
在所述批量任务处于第一状态的情况下,执行以下操作的至少之一:
对所述待处理任务执行第一阶段操作;
在第一次查看的情况下,对所述待处理任务执行第一阶段操作;
在第二次查看的情况下,结束工作线程;
其中,所述第一状态用于表示所述批量任务处于导入过程中;所述第一阶段操作包括将所述待处理任务的数据导入为中间态数据。
3.根据权利要求1或2所述的方法,其中,根据所述批量任务的状态,对所述待处理任务执行所述批量任务所处阶段对应的操作,包括:
在所述批量任务处于第二状态的情况下,对所述待处理任务执行第二阶段操作;
其中,所述第二状态用于表示所述批量任务已经全部执行了第一阶段操作;所述第二阶段操作包括将所述批量任务中成功导入的所述待处理任务的中间态数据提交为完成态数据。
4.根据权利要求1至3中任一项所述的方法,其中,根据所述批量任务的状态,对所述待处理任务执行所述批量任务所处阶段对应的操作,还包括:
在所述批量任务处于第三状态的情况下,执行回滚操作,其中,所述第三状态用于表示所述批量任务处于导入过程中收到撤销请求。
5.根据权利要求4所述的方法,其中,所述执行回滚操作包括:
发送用于表示已经撤销导入的通知,清除已经导入的中间态数据。
6.根据权利要求1至5中任一项所述的方法,其中,根据所述批量任务的状态,对所述待处理任务执行所述批量任务所处阶段对应的操作,还包括:
在所述批量任务处于第四状态或第五状态的情况下,结束工作线程,其中,所述第四状态用于表示所述批量任务已经完成提交;所述第五状态用于表示所述批量任务的由于撤销而终止。
7.根据权利要求1至6中任一项所述的方法,还包括:对所述批量任务进行状态维护,具体包括以下至少之一:
在执行第一阶段操作的情况下,更新导入成功的第一数目和/或导入失败的第二数目;在根据所述第一数目和/或所述第二数目确定已处理任务量达到所述批量任务的总数的情况下,将所述批量任务的第一状态更新为第二状态,其中,所述第一状态用于表示所述批量任务处于导入过程中,所述第二状态用于表示所述批量任务已经全部执行了第一阶段操作;
在执行第二阶段操作的情况下,将所述批量任务的第二状态更新为第四状态,所述第四状态用于表示所述批量任务已经完成提交;
在执行回滚操作的情况下,将所述批量任务的第三状态更新为第五状态,其中,所述第三状态用于表示所述批量任务处于导入过程中收到撤销请求,所述第五状态用于表示所述批量任务的由于撤销而终止。
8.根据权利要求1至7中任一项所述的方法,其中,从批量任务中获取待处理任务,包括:
利用需要导入的文件和图像,生成所述批量任务的每个所述待处理任务;
将多个所述待处理任务加入任务队列;
利用线程池中的多个工作线程,从所述任务队列中读取所述待处理任务。
9.根据权利要求8所述的方法,其中,每个所述待处理任务包括需要导入的人员信息、需要导入的图像的标识和需要导入的图像的存储路径中至少之一;
其中,所述人员信息和图像标识是从需要导入的文件中解析得到的;所述需要导入的图像的存储路径包括在上传所述需要导入的图像后收到的统一资源定位符。
10.根据权利要求8或9所述的方法,其中,还包括:
根据所述待处理任务中的需要导入的图像的存储路径,下载所述需要导入的图像;
将需要导入的人员信息和需要导入的图像关联。
11.根据权利要求1至10中任一项所述的方法,其中,所述批量任务的不同状态具有不同开关标识。
12.根据权利要求11所述的方法,其中,每个所述开关标识的值允许从第一值修改为第二值。
13.根据权利要求11或12所述的方法,其中,所述批量任务的状态具有优先级,在多个不同的状态对应的开关标识的值相同的情况下,按照优先级确定有效状态。
14.根据权利要求1至13中任一项所述的方法,其中,所述方法还包括:
对所述待处理任务的输入信息进行检测,确定错误类型;
根据所述错误类型,对所述输入信息执行对应处理。
15.根据权利要求14所述的方法,其中,所述根据所述错误类型,对所述输入信息执行对应处理,包括以下至少之一:
在所述错误类型为第一类错误且所述输入信息为第一类信息的情况下,记录为导入失败;
在所述错误类型为第一类错误且所述输入信息为第二类信息的情况下,将所述待处理任务的错误信息置空后提交到线程池进行重试;
在所述错误类型为第二类错误的情况下,将所述待处理任务提交到线程池进行重试。
16.一种任务处理装置,包括:
获取模块,用于从批量任务中获取待处理任务;
处理模块,用于根据所述批量任务的状态,对所述待处理任务执行所述批量任务所处阶段对应的操作。
17.根据权利要求16所述的装置,其中,所述处理模块包括:
第一处理子模块,具体用于在所述批量任务处于第一状态的情况下,执行以下操作的至少之一:
对所述待处理任务执行第一阶段操作;
在第一次查看的情况下,对所述待处理任务执行第一阶段操作;
在第二次查看的情况下,结束工作线程;
其中,所述第一状态用于表示所述批量任务处于导入过程中;所述第一阶段操作包括将所述待处理任务的数据导入为中间态数据。
18.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-15中任一项所述的方法。
19.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-15中任一项所述的方法。
20.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-15中任一项所述的方法。
CN202111491719.6A 2021-12-08 2021-12-08 任务处理方法、装置、设备以及存储介质 Pending CN114138447A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111491719.6A CN114138447A (zh) 2021-12-08 2021-12-08 任务处理方法、装置、设备以及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111491719.6A CN114138447A (zh) 2021-12-08 2021-12-08 任务处理方法、装置、设备以及存储介质

Publications (1)

Publication Number Publication Date
CN114138447A true CN114138447A (zh) 2022-03-04

Family

ID=80385134

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111491719.6A Pending CN114138447A (zh) 2021-12-08 2021-12-08 任务处理方法、装置、设备以及存储介质

Country Status (1)

Country Link
CN (1) CN114138447A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116932252A (zh) * 2023-09-18 2023-10-24 北京冠群信息技术股份有限公司 一种基于批量数据导入流水线的异步任务补偿方法及装置
WO2023221370A1 (zh) * 2022-05-19 2023-11-23 北京百度网讯科技有限公司 批量任务处理的方法、装置及电子设备
CN117194549A (zh) * 2023-11-07 2023-12-08 上海柯林布瑞信息技术有限公司 基于任务数据配置的数据传输方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023221370A1 (zh) * 2022-05-19 2023-11-23 北京百度网讯科技有限公司 批量任务处理的方法、装置及电子设备
CN116932252A (zh) * 2023-09-18 2023-10-24 北京冠群信息技术股份有限公司 一种基于批量数据导入流水线的异步任务补偿方法及装置
CN116932252B (zh) * 2023-09-18 2024-01-26 北京冠群信息技术股份有限公司 一种基于批量数据导入流水线的异步任务补偿方法及装置
CN117194549A (zh) * 2023-11-07 2023-12-08 上海柯林布瑞信息技术有限公司 基于任务数据配置的数据传输方法及装置
CN117194549B (zh) * 2023-11-07 2024-01-26 上海柯林布瑞信息技术有限公司 基于任务数据配置的数据传输方法及装置

Similar Documents

Publication Publication Date Title
CN114138447A (zh) 任务处理方法、装置、设备以及存储介质
US9886441B2 (en) Shard aware near real time indexing
US5530848A (en) System and method for implementing an interface between an external process and transaction processing system
US8738591B2 (en) Sorting transactions in a memory object store
CN107451853B (zh) 一种红包实时派发的方法、装置、系统及存储介质
US9560123B2 (en) Using a same program on a local system and a remote system
CN112100182B (zh) 数据入库处理方法、装置和服务器
CN110795479A (zh) 基于数据的分布式etl调度的方法和装置
US20220012692A1 (en) Schedule information acquiring method, apparatus, device, storage medium and program product
US11914569B2 (en) Light weight redundancy tool for performing transactions
CN113127564B (zh) 一种参数同步方法和装置
CN113076304A (zh) 一种分布式版本管理方法、装置和系统
CN111028074A (zh) 逾期账单的更新和查询方法、系统、服务器和存储介质
CN115544044A (zh) 一种数据一致性保持方法、装置、设备和存储介质
US10644931B2 (en) Event ordering framework in distributed asynchronous systems
CN114785749A (zh) 一种消息群发处理方法和装置
EP3377970B1 (en) Multi-version removal manager
US20210034590A1 (en) Ledger-based machine learning
CN113761075A (zh) 切换数据库的方法、装置、设备和计算机可读介质
CN112182003A (zh) 一种数据同步方法和装置
US20230325248A1 (en) Computer system and data consistency maintenance method
US12003590B2 (en) Performance-enhancing cross-system request handling via shared memory cache
US20240126780A1 (en) Data processing during data replication
CN117076503A (zh) 一种交易数据的聚合查询方法、装置、设备及介质
JP2017091213A (ja) データベース更新処理システムおよびデータベース更新処理方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination