pyspider @every时间设置无效

在pyspider中用@every设置时间间隔,对于有些project无效,启动一次之后一直没有重启:

@every(seconds=30)
def on_start(self):
    self.crawl('http://www.i7wx.com/', callback=self.index_page)

图片描述

阅读 5.9k
2 个回答

两种可能:
1 every 会在第一次启动的时候永久生效,后续怎么改都不会起作用,除非删除project重新开一个,或者重启pyspider(不确定会有效)
2 age 时间超过 every

Pyspider自带去重队列,问题中的写法:self.crawl('http://www.i7wx.com/', callback=self.index_page),会默认该task(链接)的age=-1,表永久去重。

# scheduler.Scheduler源码
default_schedule = {
        'priority': 0,
        'retries': 3,
        'exetime': 0,
        'age': -1,
        'itag': None,
    }

如果你想实现@every的用法,需要添加添加一个age参数,指定task(链接)的去重有效时间,且age参数的值要小于@every的值。

# 每30秒执行一次on_start方法
@every(seconds=30)
def on_start(self):
    self.crawl('http://www.i7wx.com/', callback=self.index_page, age=10)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进