【问题标题】:Scrapy 's Scrapyd too slow with scheduling spidersScrapy 的 Scrapyd 调度蜘蛛太慢了
【发布时间】:2012-02-06 14:34:22
【问题描述】:

我正在运行 Scrapyd,同时启动 4 个蜘蛛时遇到了一个奇怪的问题。

2012-02-06 15:27:17+0100 [HTTPChannel,0,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:17+0100 [HTTPChannel,1,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:17+0100 [HTTPChannel,2,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:17+0100 [HTTPChannel,3,127.0.0.1] 127.0.0.1 - - [06/Feb/2012:14:27:16 +0000] "POST /schedule.json HTTP/1.1" 200 62 "-" "python-requests/0.10.1"
2012-02-06 15:27:18+0100 [Launcher] Process started: project='thz' spider='spider_1' job='abb6b62650ce11e19123c8bcc8cc6233' pid=2545 
2012-02-06 15:27:19+0100 [Launcher] Process finished: project='thz' spider='spider_1' job='abb6b62650ce11e19123c8bcc8cc6233' pid=2545 
2012-02-06 15:27:23+0100 [Launcher] Process started: project='thz' spider='spider_2' job='abb72f8e50ce11e19123c8bcc8cc6233' pid=2546 
2012-02-06 15:27:24+0100 [Launcher] Process finished: project='thz' spider='spider_2' job='abb72f8e50ce11e19123c8bcc8cc6233' pid=2546 
2012-02-06 15:27:28+0100 [Launcher] Process started: project='thz' spider='spider_3' job='abb76f6250ce11e19123c8bcc8cc6233' pid=2547 
2012-02-06 15:27:29+0100 [Launcher] Process finished: project='thz' spider='spider_3' job='abb76f6250ce11e19123c8bcc8cc6233' pid=2547 
2012-02-06 15:27:33+0100 [Launcher] Process started: project='thz' spider='spider_4' job='abb7bb8e50ce11e19123c8bcc8cc6233' pid=2549 
2012-02-06 15:27:35+0100 [Launcher] Process finished: project='thz' spider='spider_4' job='abb7bb8e50ce11e19123c8bcc8cc6233' pid=2549 

我已经为 Scrapyd 设置了这些设置:

[scrapyd]
max_proc = 10

为什么 Scrapyd 不同时运行蜘蛛,就像它们预定的一样快?

【问题讨论】:

    标签: python scrapy scrapyd


    【解决方案1】:

    我已经通过在第 30 行编辑 scrapyd/app.py 解决了这个问题。

    timer = TimerService(5, poller.poll) 更改为timer = TimerService(0.1, poller.poll)

    编辑: AliBZ 下面关于配置设置的评论是更改轮询频率的更好方法。

    【讨论】:

    • 根据scrapyd,您可以将poll_interval = 0.1 添加到位于/etc/scrapyd/conf.d/000-default 的scrapyd 配置文件中。
    【解决方案2】:

    根据我使用scrapyd 的经验,它不会像您安排的那样立即运行蜘蛛。它通常会等待一点,直到当前的蜘蛛启动并运行,然后它开始下一个蜘蛛进程(scrapy crawl)。

    因此,scrapyd 会一个接一个地启动进程,直到达到 max_proc 计数。

    从您的日志中,我看到您的每个蜘蛛都运行了大约 1 秒。我想,如果它们至少运行 30 秒,你就会看到所有的蜘蛛都在运行。

    【讨论】:

    • 是的;这也是我注意到的。我已经实现了一个 subprocess.Popen 调用来立即抓取,因为结果会立即显示出来。我希望以某种方式加快 Scrapyd 的调度程序 :)
    • 我认为 scrapyd 目前的做法是合乎逻辑的。它不想让系统同时启动许多蜘蛛超载——它不知道你计划运行的蜘蛛是重的还是轻的。这就是为什么它会一只一只地运行蜘蛛。你可以研究scrapyd代码,也许你会找到一些需要调整的地方。如果您觉得答案有用,请点赞。
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多