Parallelism/Performance Scrapyd 和单蜘蛛的问题

Parallelism/Performance problems with Scrapyd and single spider

上下文

我是 运行 scrapyd 1.1 + scrapy 0.24.6,有一个 "selenium-scrapy hybrid" 蜘蛛,可以根据参数在许多域上爬行。 托管 scrapyd 实例的开发机器是 OSX Yosemite 具有 4 个内核,这是我当前的配置:

[scrapyd]
max_proc_per_cpu = 75
debug = on

scrapyd启动时的输出:

2015-06-05 13:38:10-0500 [-] Log opened.
2015-06-05 13:38:10-0500 [-] twistd 15.0.0 (/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python 2.7.9) starting up.
2015-06-05 13:38:10-0500 [-] reactor class: twisted.internet.selectreactor.SelectReactor.
2015-06-05 13:38:10-0500 [-] Site starting on 6800
2015-06-05 13:38:10-0500 [-] Starting factory <twisted.web.server.Site instance at 0x104b91f38>
2015-06-05 13:38:10-0500 [Launcher] Scrapyd 1.0.1 started: max_proc=300, runner='scrapyd.runner'

编辑:

核心数:

python -c 'import multiprocessing; print(multiprocessing.cpu_count())' 
4

问题

我想要一个设置来为单个蜘蛛同时处理 300 个作业,但 scrapyd 一次处理 1 到 4 个作业,而不管有多少作业待处理:

编辑:

CPU 用法并不压倒性:

测试于 UBUNTU

我也在 Ubuntu 14.04 VM 上测试了这个场景,结果大致相同:执行时最多达到 5 个作业 运行,没有压倒性 CPU 消耗,执行相同数量的任务所花费的时间大致相同。

日志显示您最多允许 300 个进程。因此,限制在链的更上游。我最初的建议是 Running multiple spiders using scrapyd.

涵盖的项目序列化

随后的调查表明限制因素实际上是轮询间隔。

我的问题是我的作业持续时间比 POLL_INTERVAL 默认值 5 秒短,因此在前一个作业结束之前没有足够的任务被轮询。将此设置更改为低于爬虫作业平均持续时间的值将有助于 scrapyd 轮询更多作业以供执行。