一种处理http超时任务的方法
技术领域
本发明涉及网络响应处理领域,具体是一种处理http超时任务的方法。
背景技术
大数据的到来使系统对超大数据的处理需求随之增长,而处理大数据的速度并没有跟上其方法的发展,目前普通计算机处理上千万条数据依旧需要较长的时间,http(超文本传输协议)以其简单快速的自身特点被应用于各种服务器终端通信中,但是当http传输数量大于系统可负载数量时,会出现http超时现象,在现有技术中,专利号为201210591684.8的超文本传输协议请求超时的处理方法及装置中公开了一种http请求超时的处理方法,该发明通过对http请求对象进行处理解决请求超时问题,但是在处理http应用请求时,存在以下问题:用户不能同时进行其他操作,而且现有的http超时处理方法导致系统资源占用过大,对系统运行的主进程产生影响,这对通过网页进行操作的用户来说是不可接受的,同时系统后端对http任务状态和处理结果存在一定的系统延时,导致系统对超时http任务处理效率有所降低,影响系统整理效率。
所以人们需要一种可以节约系统资源的一种处理http超时任务的方法提高处理效率,以解决上述问题。
发明内容
本发明的目的在于提供一种处理http超时任务的方法,以解决现有技术中的问题。
为实现上述目的,本发明提供如下技术方案:
一种处理http超时任务的方法,所述处理http超时任务的方法包括以下步骤:
步骤S1,构建处理http超时框架,将所述处理http超时框架分为前端平台和后端平台,同时将框架中的http任务在前端平台根据启动方式的不同分为异步任务Async task和定时任务Crontab task;
步骤S2,所述前端平台将http任务进行转化并发送,所述转化为将http任务数据转化与任务访问接口匹配的数据格式,进行数据发送;
步骤S3,所述后端平台接收到所述前端平台发送的http任务数据,对所述http任务数据进行处理,并向前端平台返回处理结果;
步骤S4,所述前端平台通过请求访问接口访问http任务数据的处理结果,并将处理结果返回给用户。
进一步地,在所述步骤S1中,构建处理http超时框架,包括以下步骤:
步骤S11,构建前端平台,通过Vue构建用户界面的渐进式框架,为处理http超时任务提供自下向上的服务;
步骤S12,安装django+celery+redis组件,构建后端平台,分别在Django、Celery和redis三者之间互相建立连接,通过Celery分发任务,采用线程池的方式替代进程池方式的进行http处理任务的发布,提高了任务分发的效率;
采用Django+celery+redis的后台框架设计,是为了满足基于http响应的长耗时任务需求,通过Celery将长耗时任务放入指定队列进行异步处理,从而不会影响主进程的运行。
步骤S13,对所述步骤S11中的http超时任务请求进行划分,分为异步任务Asynctask和定时任务Crontab task,异步任务Async task通过Celery Worker启动,定时任务Crontab task通过Celery Beat启动。
优选地,所述步骤S11与所述步骤S12通过请求访问接口进行连接,所述步骤S11定时向请求访问接口发送http任务,在发送任务之前,将http任务数据转化为与请求访问接口匹配的数据格式,通过json.load和dump方法进行json格式的转化,随后进行任务数据的发送,其中,所述http任务包括http请求和http响应。
优选地,所述步骤S1中,Vue为前端平台,Django为后端框架,通过服务器在后端框架中安装Celery和redis组件,进入步骤S2。
进一步地,所述步骤S2中,前端平台通过封装Axios工具向后端平台发送http请求或http响应,实现ajax功能,在发送http任务时,对http任务进行数据格式处理并向后端平台使用线程池的方式发送http处理数据,提高任务发送的效率。
进一步地,所述步骤S3包括以下步骤:
步骤S31,所述后端平台通过请求访问接口接收所述前端平台发送的http任务;
步骤S32,对所述步骤S31中接收到的http任务进行识别,识别所述http任务是异步任务Async task还是定时任务Crontab task;
步骤S33,在当前http任务中创建Celery异步任务,开始处理数据。
优选地,对http任务进行数据处理,创建Celery实例,所述Celery实例包括划分为异步任务Async task或实时任务Crontab task的http任务和任务执行单元CeleryWorker,所述步骤S33包括以下步骤:
步骤S331,根据所述步骤S31接收的http任务请求,调用异步任务Async task,同时生成所述异步任务Async task唯一匹配的任务ID;
步骤S332,在所述任务执行单元Celery Worker中配置redis作为消息队列和结果队列,所述消息队列对应消息中间件Broker,所述结果队列对应结果存储Backend,将Celery实例中的http任务发送至消息中间件Broker,同时在任务执行单元Celery Worker对消息中间件Broker进行监控;
步骤S333,所述步骤S332执行异步任务Async task,调用的异步任务Async task的执行状态和任务ID存储至结果存储Backend中;
步骤S334,将所述步骤S333中存储的异步任务结果迁移到Django数据库中,所述Django通过连接访问http任务处理结果,通过请求访问接口将http请求处理结果反馈,结果反馈形式为{任务ID:[处理结果]}。
通过uwsgi和nginx部署Django和Vue的前后端框架后,可在服务器上安装Celery和redis组件,并通过Celery的apply_async方法调用异步任务,同时生成一个任务ID,redis作为消息中间,接收任务ID并分发消息,开启异步任务,并在任务结束后存储任务的状态和结果;
将存储在redis的异步任务结果转存至Django源生数据库中,使前端定时访问接口获取任务结果,从而摆脱了利用Celery开启异步任务后,必须通过flower等监控软件获取任务状态,而是简单地通过前端便可获取任务状态和结果。
进一步地,所述步骤S4包括以下步骤:
步骤S41,前端平台通过所述请求访问接口的get(key=ID)命令获取访问所述步骤S334中反馈的http任务处理结果,任务处理结果以列表的形式进行存储,其中任务处理结果中包括http超时任务的结果result、状态status和任务参数task_args;
步骤S42,当http任务处理结果result为程序中的自身任务,http任务处理成功,向用户发送成功提示,结束http超时任务的处理;
当http任务处理结果result=failed时,http任务处理失败,向用户发送失败提示以及失败原因,结束此次http超时任务的处理。
与现有技术相比,本发明的有益效果是:
1.本发明采用Django+celery+redis的后台框架设计,是为了满足基于http响应的长耗时任务需求,通过celery将长耗时任务放入指定队列进行异步处理,从而不会影响主进程的运行。本发明选用了redis作为消息和结果队列,是因为redis具有轻量级、效率高、实时性强的特点,相比于rabbitmq具有更强的适应性。
2.通过uwsgi和nginx部署django和vue的前后端框架后,可在服务器上安装celery和redis,并通过celery的apply_async方法调用异步任务,同时生成一个任务ID,Redis作为消息中间,接收任务id并分发消息,开启异步任务,并在任务结束后存储任务的状态和结果。
3.本发明通过Django+celery+redis和Django-Celery-results框架结合的方法,将存储在redis的异步任务结果转存至Django源生数据库中,使前端定时访问接口获取任务结果,从而摆脱了利用Celery开启异步任务后,必须通过flower等监控软件获取任务状态,而是简单地通过前端便可获取任务状态和结果。
附图说明
为了使本发明的内容更容易被清楚地理解,下面根据具体实施例并结合附图,对本发明作进一步详细的说明。
图1为本发明一种处理http超时任务的方法的方法流程示意图;
图2为本发明一种处理http超时任务的方法的实施例的流程图;
图3为本发明一种处理http超时任务的方法的步骤S3的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,一种处理http超时任务的方法,包括,以下步骤:
步骤S1,构建处理http超时框架,将所述处理http超时框架分为前端平台和后端平台,同时将框架中的http任务在前端平台根据启动方式的不同分为异步任务Async task和定时任务Crontab task;
步骤S2,前端平台将http任务进行转化并发送,转化为将http任务数据转化与任务访问接口匹配的数据格式,进行数据发送;
步骤S3,后端平台接收到所述前端平台发送的http任务数据,对http任务数据进行处理,并向前端平台返回处理结果;
步骤S4,前端平台通过请求访问接口访问http任务数据的处理结果,并将处理结果返回给用户。
在步骤S1中,构建处理http超时框架,包括以下步骤:
步骤S11,构建前端平台,通过Vue构建用户界面的渐进式框架,为处理http超时任务提供自下向上的服务;
步骤S12,安装django+celery+redis组件,构建后端平台,分别在django、celery和redis三者之间互相建立连接;
步骤S13,对步骤S11中的http超时任务请求进行划分,分为异步任务Async task和定时任务Crontab task。
步骤S11与步骤S12通过请求访问接口进行连接,步骤S11定时向请求访问接口发送http任务,在发送任务之前,将http任务数据转化为与请求访问接口匹配的数据格式,通过json.load和dump方法进行json格式的转化,随后进行任务数据的发送,其中,http任务包括http请求和http响应。
步骤S1中,Vue为前端平台,Django为后端框架,通过服务器在后端框架中安装celery和redis组件,进入步骤S2。
步骤S2中,前端平台通过封装Axios工具向后端平台发送http请求或http响应,实现ajax功能,在发送http任务时,对http任务进行数据格式处理并向后端平台使用线程池的方式发送http处理数据。
步骤S3包括以下步骤:
步骤S31,后端平台通过请求访问接口接收前端平台发送的http任务;
步骤S32,对步骤S31中接收到的http任务进行识别,识别所述http任务是异步任务Async task还是定时任务Crontab task;
步骤S33,在当前http任务中创建Celery异步任务,开始处理数据。
对http任务进行数据处理,创建Celery实例,所述Celery实例包括划分为异步任务Async task或实时任务Crontab task的http任务和任务执行单元Celery Worker,步骤S33包括以下步骤:
步骤S331,根据步骤S31接收的http任务请求,调用异步任务Async task,同时生成异步任务Async task唯一匹配的任务ID;
步骤S332,在任务执行单元Celery Worker中配置redis作为消息队列和结果队列,消息队列对应消息中间件Broker,结果队列对应结果存储Backend,将Celery实例中的http任务发送至消息中间件Broker,同时在任务执行单元Celery Worker对消息中间件Broker进行监控;
步骤S333,步骤S332执行异步任务Async task,调用的异步任务Async task的执行状态和任务ID存储至结果存储Backend中;
步骤S334,将步骤S333中存储的异步任务结果迁移到Django数据库中,Django通过连接访问http任务处理结果,通过请求访问接口将http请求处理结果反馈,结果反馈形式为{任务ID:[处理结果]}。
步骤S4包括以下步骤:
步骤S41,前端平台通过所述请求访问接口的get(key=ID)命令获取访问所述步骤S334中反馈的http任务处理结果,任务处理结果以列表的形式进行存储,其中任务处理结果中包括结果result、状态status和任务参数task_args;
步骤S42,当http任务处理结果result为程序中的自身任务,http任务处理成功,向用户发送成功提示,结束http超时任务的处理;
当http任务处理结果result=failed是,http任务处理失败,向用户发送失败提示以及失败原因,结束此次http超时任务的处理。
请参阅图2~3,本发明实施例中,一种处理http超时任务的方法,包括以下步骤:步骤S1,构建处理http超时框架,将所述处理http超时框架分为前端平台和后端平台,同时将框架中的http任务在前端平台分为异步任务Async task和定时任务Crontab task;
构建处理http超时框架,包括以下步骤:
步骤S11,构建前端平台,通过Vue构建用户界面的渐进式框架,为处理http超时任务提供自下向上的服务;
步骤S12,安装Django+celery+redis组件,构建后端平台,分别在django、celery和redis三者之间互相建立连接,前端平台和后端平台通过请求访问接口进行连接,前端平台定时向请求访问接口发送http任务,在发送任务之前,将http任务数据转化为与请求访问接口匹配的数据格式,随后进行任务数据的发送,通过服务器在后端框架中安装celery和redis组件;
步骤S13,对所述步骤S11中的http超时任务请求进行划分,分为异步任务Asynctask和定时任务Crontab task。
步骤S2,前端平台将http任务进行转化并发送,通过封装Axios工具向后端平台发送http请求或http响应,实现ajax功能,在发送http任务时,对http任务进行数据格式处理并向后端平台发送http处理数据,所述转化为将http任务数据转化与任务访问接口匹配的数据格式,进行数据发送。
步骤S3,所述后端平台接收到所述前端平台发送的http任务数据,对所述http任务数据进行处理,并向前端平台返回处理结果,包括:
步骤S31,所述后端平台通过请求访问接口接收所述前端平台发送的http任务;
步骤S32,对所述步骤S31中接收到的http任务进行识别,识别所述http任务是异步任务Async task还是定时任务Crontab task;
步骤S33,在当前http任务中创建Celery异步任务,开始处理数据,对http任务进行数据处理,创建Celery实例,所述Celery实例包括划分为异步任务Async task或实时任务Crontab task的http任务和任务执行单元Celery Worker,具体为:
步骤S331,根据所述步骤S31接收的http任务请求,调用异步任务Async task,同时生成所述异步任务Async task唯一匹配的任务ID;
步骤S332,在所述任务执行单元Celery Worker中配置redis作为消息队列和结果队列,所述消息队列对应消息中间件Broker,所述结果队列对应结果存储Backend,将Celery实例中的http任务发送至消息中间件Broker,同时在任务执行单元Celery Worker对消息中间件Broker进行监控;
步骤S333,所述步骤S332执行异步任务Async task,调用的异步任务Async task的执行状态和任务ID存储至结果存储Backend中;
步骤S334,将所述步骤S333中存储的异步任务结果迁移到Django数据库中,所述Django通过连接访问http任务处理结果,通过请求访问接口将http请求处理结果反馈。
步骤S4,所述前端平台通过请求访问接口访问http任务数据的处理结果,并将处理结果返回给用户,处理成功向用户发送成功提醒,失败则发送失败提醒并告知失败原因。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。