图片抓取方法和系统的制作方法_2

文档序号:9375687阅读:来源:国知局
发可以包括:将图片抓取任务分发给当前进程数最少的任务服务器;当前进程数相同时,分发给总线程数最少的任务服务器等。上述分发方式仅为示例,可根据需要采用其他方式。
[0043]步骤S260,多个任务服务器根据分发的图片抓取任务,对图片进行抓取。
[0044]步骤S270,任务服务器对图片进行抓取之后,产生状态信息,并将状态信息返回至调度服务器,若状态信息为抓取成功,执行步骤S280,若状态信息为抓取失败,执行步骤S290o
[0045]调度服务器根据反馈的不同状态信息,执行相应的动作。状态信息可由一组状态码表示,例如,抓取成功的状态码为200,重试状态码为O等。
[0046]步骤S280,调度服务器向请求方返回抓取成功的消息,执行步骤S2120。
[0047]可通过任务服务器的数据接口向请求方返回抓取成功地消息。
[0048]步骤S290,统计抓取失败的次数,将抓取失败次数与预设阈值相比较,若抓取失败次数小于预设阈值,执行步骤S2100,否则执行步骤S2110。
[0049]例如,预设阈值为3,即抓取失败的限制次数为3次,这有利于提高图片抓取的成功率。
[0050]步骤S2100,重复生成对应的图片抓取任务,将重复生成的图片抓取任务加入任务总队列中。
[0051]步骤S2110,向请求方返回失败消息。
[0052]通过任务服务器的数据接口返回失败消息。
[0053]步骤S2120,对抓取的图片进行处理,并对处理后的图片进行消重存储。
[0054]任务服务器可能对抓取的部分图片进行处理,包括:图像的裁剪,缩放等。
[0055]可选地,在对图片进行处理时,也可以与图片抓取过程中类似地,根据图片处理请求生成处理在任务服务器上生成处理任务的子队列,然后交由调度服务器统一分发。
[0056]多个任务服务器处理后的图片由消重存储器消重处理后统一存储。对于不需处理的图片,任务处理器抓取成功后可直接进行消重存储。
[0057]根据本发明上述实施例提供的方法,调度服务器根据多个任务服务器的进程、线程状态,得出任务服务器的空闲信息,根据空闲信息进行抓取任务分发,还包含非法任务过滤的步骤,进一步提高了效率,抓取失败时,进行一定次数的重试,提高了抓取的成功率。
[0058]图3示出了根据本发明另一个实施例的图片抓取方法的流程图,该实施例具体描述了抓取任务分发至任务服务器后,任务服务器对抓取任务的执行过程,如图3所示,该方法包括如下步骤:
[0059]步骤S310,多个任务服务器的数据接口接收图片抓取请求。
[0060]步骤S320,多个任务服务器分别根据各自接收的图片抓取请求生成图片抓取任务,并存储图片抓取任务。
[0061]步骤S330,调度服务器从多个任务服务器中获取图片抓取任务,将获取的图片抓取任务存储为任务总队列。
[0062]步骤S340,调度服务器按预设的规则从任务总队列中取出图片抓取任务,分发给多个任务服务器。
[0063]步骤S310-S330的【具体实施方式】可参见前一实施例,此处不再赘述。
[0064]步骤S350,任务服务器启动主进程。
[0065]任务服务器通过主进程将图片抓取任务分发至主进程下的子进程,子进程对每个图片抓取任务生成一个线程,通过线程对图片进行抓取。
[0066]步骤S360,主进程判断是否存在线程数小于预设最大线程数的子进程,若存在线程数小于预设最大线程数的子进程,执行步骤S370,否则执行步骤S380。
[0067]主进程下可以有多个子进程,每个子进程有承载的最大任务数量的限制,通常,该最大任务数量就是子进程下的最大线程数。该最大线程数根据服务器性能及实际需要预先设定。某一时刻的一个任务服务器中,可能在一部分子进程中,正在执行图片抓取任务的线程数达到了预设的最大线程数,另一部分子进程未达到该预设最大线程数或未处理图片抓取任务,主进程可以优先将图片抓取任务分发至处于空闲状态的子进程。
[0068]步骤S370,将图片抓取任务分发给线程数小于预设最大线程数的子进程。
[0069]每个子进程当前正在执行的图片抓取任务的线程数是不同的,主进程进行图片抓取任务分发时,需要根据每个子进程正在执行的图片抓取的线程数进行分发。例如,在本发明实施例中,可以将最大线程数设置为10,当一个子进程中正在执行图片抓取任务的线程数达到10时,主进程不再向这个子进程中分发图片抓取任务。当一个子进程中正在执行图片抓取任务的数量未达到10时,主进程则可以选择向这个子进程中分发图片抓取任务。
[0070]当有多个子进程下的线程数小于预设最大线程数时,主进程可进一步采用多种方式分发图片抓取任务,例如,将图片抓取任务分发给当前线程数最少的子进程,或者随机分发给任一个当前线程数小于预设最大线程数的子进程。
[0071 ] 在本发明实施例中,多个子进程可以同时进行图片抓取任务。可选地,子进程可以通过异步非阻塞I/o模型进行带抓取图片的异步抓取,其中I/O是指Input/Output,即输入输出端口。异步非阻塞I/O模型是一种任务处理与I/O重叠进行的模型,S卩:在一个子进程中,利用计算机处理速度与I/O速度之间的差异,对计算操作和I/O处理进行重叠处理,使一个子进程可以同时执行多个I/O请求。
[0072]步骤S380,判断子进程的数量是否小于预设最大子进程数,如果小于,执行步骤S390o
[0073]当主进程下的当前所有子进程中的线程数都已达到预设最大线程数时,任务服务器进一步检查子进程数量是否到达预设最大子进程数。预设最大子进程数的确定可参考服务器的CPU核数,例如,在16核的服务器上,预设最大子进程数为16。
[0074]步骤S390,新建一个子进程,将图片抓取任务分发至新建的子进程。
[0075]任务服务器中的子进程数未达到预设最大子进程数时,主进程新建一个子进程,将图片抓取任务分发至所述新建的子进程。
[0076]需要说明的是,新建子进程的条件不仅限于主进程下的所有子进程中的当前线程数均达到预设最大线程数。当线程数小于最大预设线程数时,也可以根据用户需要,新建一个子进程,将图片抓取任务分发至新建的子进程。
[0077]根据本发明上述实施例提供的方法,主进程将图片抓取任务按照子进程及线程的状态进行分发,避免了将图片抓取任务分发至已达到最大抓取任务限制的子进程中,而造成的图片抓取任务搁置或延迟处理的问题,提高了图片抓取的效率。子进程通过异步抓取机制完成待抓取图片的异步抓取,可以同时执行多个I/o请求,提高了图片抓取的效率。
[0078]图4示出了根据本发明一个实施例的图片抓取系统的结构框图,如图4所示,该系统包括:
[0079]调度服务器42和多个任务服务器41,图4中仅示出了其中一个任务服务器,任务服务器41包括:
[0080]数据接口 410,用于接收图片抓取请求。
[0081]任务模块411,用于根据接收的图片抓取请求生成图片抓取任务,并存储图片抓取任务。
[0082]一个图片抓取请求中可能生成多个图片抓取任务,例如,图片处理请求中包含一个或多个待抓取的图片的URL地址,任务模块411为每个图片的URL生成一个图片抓取任务。
[0083]可选地,任务模块411将生成的图片抓取任务存储在一个任务子队列中。该任务子队列可以是一个常驻的内存队列。例如,该任务队列可以使用redis实现。还可以将任务子队列在磁盘上做持久化,则当任务服务器发生断电、重启时,待处理的任务也不会丢失。
[0084]抓取模块412,用于根据调度服务器分发的图片抓取任务,对图片进行抓取。
[0085]可选地,抓取模块412进一步包括:主进程单元4121和子进程单元4122,其中,主进程单元4121用于启动主进程,主进程将图片抓取任务进一步分发至主进程下的子进程,子进程单元4122用于通过子进程对每个图片抓取任务生成一个线程,利用线程对图片进行抓取。
[0086]可选地,抓取模块412进一步包括:判断单元4123和建立单元4124,其中,判断单元4123用于判断是否存在线程数小于预设最大线程数的子进程。主进程单元4121具体用于:当存在线程数小于预设最大线程数的子进程时,将图片抓取任务分发给该线程数小于预设最大线程数的子进程。
[0087]判断单元4123进一步用于当不存在线程数小于预设最大线程数的子进程时,判断子进程的数量是否小于最大子进程数。
[0088]建立单元4124用于当子进程的数量小于最大子进程数时,新建一个子进程。
[0089]建立单元4124新建子进程的条件不仅限于主进程下的所有子进程中的当前线程数均达到预设最大线程数。当线程数小于最大预设线程数时,建立单元4124也可以选择新建一个子进程,将图片抓取任务分发至新建的子进程。
[0090]主进程单元4121还用于:当子进程的数量小于最大子进程数时,将图片抓取任务分发至新建的子进程。
[0091]可选地,任务服务器41还包括:过滤模块413,用于
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1