首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过按正确的顺序排序脚本来最大限度地减少运行时间

通过按正确的顺序排序脚本来最大限度地减少运行时间
EN

Stack Overflow用户
提问于 2016-09-24 14:33:42
回答 2查看 42关注 0票数 0

我使用scrapy和scrapyd来抓取一些内容。我有28个爬虫在运行,但一次只有8个。每个crawler需要10分钟到几个小时才能完成。因此,我正在寻找一种方法来正确地对它们进行排序,以便最大限度地减少服务器活动的时间。

我已经收集了每次爬行需要多长时间的信息,所以这只是最小化问题,或者如何制定它。

该脚本是使用php启动的,因此解决方案最好在php中运行。

EN

回答 2

Stack Overflow用户

发布于 2016-09-24 15:52:36

我发现最好的方法是将它们设置为在特定时间执行的cronjob。我有大约30个cronjob配置为在不同的时间启动,这意味着您可以设置每个碎片的特定时间。

每天下午5点由cronjob执行PHP命令:

代码语言:javascript
运行
复制
* 17 * * * php /opt/test.php

如果你通过cronjob执行scrapy python命令,它的:

代码语言:javascript
运行
复制
* 17 * * * cd /opt/path1/ && scrapy crawl site1

如果您使用的是virtualenv作为python,那么它的

代码语言:javascript
运行
复制
* 17 * * * source /opt/venv/bin/activate && cd /opt/path1/ && scrapy crawl site1
票数 0
EN

Stack Overflow用户

发布于 2016-09-25 10:33:21

很抱歉让你失望了,但是在你的描述中没有任何聪明的东西,也没有任何最小化的问题,因为你没有说明爬行作业之间的依赖关系。无论您如何排序,独立作业都将占用~ TOTAL_TIME/THROUGHPUT

scrapyd将在一个作业完成后立即开始处理下一个作业。“一次8个”不是某种桶的东西,所以这里不存在组合/动态编程问题。只需将所有28个作业抛给scrapyd并让其运行即可。当您轮询并发现它空闲时,您可以关闭您的服务器。

首先调度时间最长的作业可能会带来一些小小的好处。当最后几个长作业完成时,您可以快速地在空闲插槽上压缩几个小作业。但是,除非你是在一些不好的情况下,这些好处不应该是主要的。

还要注意,这个数字"8“--我猜是由max_proc_per_cpu和/或max_proc强制执行的--有点随意。除非你达到了100%的CPU或其他的数字,也许更大的数字会更合适。

如果你想要更大的收益,找到2-3个最大的工作,并找到一种方法将它们一分为二,例如,如果你用车辆抓取一个网站,将单个抓取分为两个,一个是汽车抓取,一个是摩托车抓取。这通常是可能的,并且将产生比重新排序更显着的好处。例如,如果较长的作业是8小时,而下一个较长的作业是5小时,那么通过将最长的作业拆分为2-4小时的爬网,您将使5小时的作业成为瓶颈,可能会为服务器节省3个小时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39673310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档