BOTO在AWS之间分配刮削任务



我有200000个URL需要从网站上抓取。这个网站有一个非常严格的抓取政策,如果抓取频率为10+/分钟,你就会被屏蔽。所以我需要控制我的步伐。我正在考虑启动几个AWS实例(比如3个)并行运行。

这样,收集所有数据的估计时间将是:

200000 URL/(10 URL/min)=20000分钟(仅限一个实例)4.6天(三次)

这是我完成工作的合理时间。

然而,我正在考虑使用boto构建一个框架。在这种情况下,我有一段代码和一个输入队列(URL列表)。同时我也不想对他们的网站造成任何损害,所以我只想在晚上和周末刮。所以我认为所有这些都应该控制在一个盒子里。

代码应该看起来像这样:

班工(作业、队列)url=队列.pop()aws=新的AWSIInstance()结果aws.scrape(url)返回结果

worker1=新worker()worker2=新工人()worker3=新工人()

worker1.start()worker2.start()worker3.start()

上面的代码完全是伪代码,我的想法是将工作传递给AWS。

问题:(1) 如何使用boto将变量/参数传递给另一个AWS实例,并启动一个脚本来处理这些变量和。。使用boto将结果检索回主框。(2) 在Python代码中,只在特定时间段安排作业的最佳方式是什么。假设每天只在下午6点到早上6点工作。。。在这种情况下,我认为Linux crontab不适合我的需要。

很抱歉,如果我的问题更多的是口头描述和哲学的话。。即使你能给我任何提示,或者扔掉一些符合我需求的包/库名称。我将不胜感激!

问题:(1)如何使用boto将变量/参数传递给另一个AWS实例并启动一个脚本来处理这些变量

使用共享数据源,如DynamoDB或消息传递框架,如SQS

和。。使用boto将结果检索回主框。

同样,共享数据源或消息传递。

(2)只在特定时间安排作业的最佳方式是什么Python代码中的句点。说只在下午6点到早上6点工作每天的我认为Linux crontab不适合我的需要情况

我认为crontab非常适合这里。

最新更新