Scrapyd和单蜘蛛的并行性/性能问题

时间:2015-06-05 17:56:12

标签: python scrapy twisted scrapyd

上下文

我使用单一"硒 - scrapy杂交"运行报废的1.1 + scrapy 0.24.6。蜘蛛根据参数爬过许多域。 托管scrapyd的实例(s?)的开发机器是一个具有4个内核的OSX Yosemite,这是我目前的配置:

[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个作业,但无论有多少作业待处理,报废一次处理1到4个:

Scrapy console with jobs

编辑:

CPU使用率不是很高:

CPU Usage for OSX

在UBUNTU上测试

我还在Ubuntu 14.04 VM上测试了这个场景,结果大致相同:执行时最多可以运行5个作业,没有压倒性的CPU消耗,或多或少同时执行相同数量的任务。

2 个答案:

答案 0 :(得分:0)

日志显示您最多允许300个进程。因此,限制是进一步上升的。我最初的建议是,Running multiple spiders using scrapyd涵盖了您项目的序列化。

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

答案 1 :(得分:0)

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