关于任务

任务是要安排的基本单位。

基础

  • 任务因其而异taskid。(默认值:md5(url),可以通过覆盖def get_taskid(self, task)方法更改)
  • 任务在不同项目之间隔离。
  • 任务有4个状态:
    • 活性
    • 失败
    • 成功
    • 坏 - 没用过
  • 仅安排处于活动状态的任务。
  • 任务按顺序提供priority。

时间表

新任务

当一项新任务(从未见过)进来时:

  • 如果exetime已设置但未到达,则将其置于基于时间的队列中以等待。

  • 否则将被接受。 当任务已经在队列中时:

  • 除非被忽略 force_update 完成任务后:

如果age设置,last_crawl_time + age < now将被接受。否则丢弃。 如果itag设置且不等于它的先前值,则将被接受。否则丢弃。

任务重试

发生提取错误或脚本错误时,默认情况下该任务将重试3次。

第一次重试将在30秒,1小时,6小时,12小时后每次执行,并且任何更多重试将推迟24小时。

如果age指定,则重试延迟不会大于age。

您可以通过添加名为retry_delayhandler 的变量来配置重试延迟。retry_delay是一个指定重试间隔的字典。dict中的项目是{recoied:seconds},还有一个特殊键:''(空字符串)用于指定默认的重试延迟(如果未指定)。

例如,默认retry_delay声明如:

  class MyHandler(BaseHandler):
      retry_delay = {
          0: 30,
          1: 1*60*60,
          2: 6*60*60,
          3: 12*60*60,
          '': 24*60*60
      }

书籍推荐