追加器上的履带

时间:2010-06-21 19:34:39

标签: google-app-engine

我想继续在appengine上运行一个程序。这个程序会自动抓取一些网站并将数据存储到它的数据库中。该程序是否有可能 不断地继续在appengine上做这件事吗?还是会让appengine杀死这个过程?

注意:将要抓取的网站不会存储在appengine上

9 个答案:

答案 0 :(得分:8)

  

我想要不断地运行一个程序   关于appengine。

<强>无法

您可以获得的最接近的是scheduled tasks后台no more than 30 seconds

  

值得注意的是,这意味着一生   单个任务的执行是   限制为30秒。如果你的任务   执行接近30秒的限制,   App Engine将引发异常   你可以赶上然后快点   保存您的工作或日志过程。

答案 1 :(得分:2)

我的一位朋友建议关注

  • 创建task queue
  • 通过传递一些数据来启动队列。
  • 使用异常处理程序并处理 DeadlineExceededException。
  • 在您的处理程序中为同样的目的创建一个新队列。

你可以无限地完成工作。您只需要考虑使用的CPU时间和存储空间。

答案 2 :(得分:1)

您可能需要考虑在较新版本的GAE中引入的后端。

这些运行连续过程

答案 3 :(得分:1)

可能,我已经在Appengine上构建了一个解决方案 - wowprice

在这里分享所有细节将使我的答案很长,

问题 - 假设我想抓取walmart.com,因为我知道我不能一次抓取(数百万种产品)

解决方案 - 我设计了我的蜘蛛来完成较小任务的任务。

  • 第1步:我输入了walmart.com的工作,Job scheduler将创建一个任务。
  • 第2步:我的蜘蛛会选择这个工作并注意到它的索引页面,现在我的蜘蛛会创建更多的工作作为起始页面作为类别页面,现在它再输入20个任务
  • 步骤3:现在蜘蛛为子类别创建更小的作业,它将一直运行到产品列表页面并为其创建任务。
  • 步骤4:对于产品列表页面,它获取产品并调用存储产品数据,如果是下一页,则会执行一项任务来抓取它们。

优势 - 我们可以在不破坏30秒规则的情况下进行爬行,并且爬行速度将取决于后端机器,它将为单个目标提供并行爬行。

答案 4 :(得分:1)

他们为你修好了。 您可以在手动缩放的实例上运行后台线程。

检查https://developers.google.com/appengine/docs/python/modules/#Python_Background_threads

答案 5 :(得分:0)

你不能真正运行一个连续的过程超过30秒。但是,您可以使用任务队列让一个进程在连续链中调用另一个进程。或者,您可以安排作业与Cron服务一起运行。

答案 6 :(得分:0)

使用cron作业定期检查过去n小时/天内没有被抓取的页面,并将这些页面的某些子集的抓取任务放到任务队列中。通过这种方式,您的进程不会因为花费太长时间而被杀死,并且您不会因为流量过多而无法对服务器进行攻击。

我已经完成了这项工作,而且效果非常好。注意任务超时;如果事情花费的时间太长,请将它们分成多个阶段,并确保自由地使用memcached。

答案 7 :(得分:0)

试试这个:

关于appengine运行任何程序。您从浏览器连接,在ajax期间单击以启动URL。 Ajax呼叫服务器,从互联网下载一些数据并返回您(您的浏览器)下一个URL。这不是一个请求,每个URL是一个不同的请求。你只能在JS中解决ajax如何调用url un cycle。

答案 8 :(得分:0)

您可以使用称为后端的持续GAE服务。检查一下http://code.google.com/appengine/docs/java/backends/ 后端是特殊的App Engine实例,没有请求截止日期,更高的内存和CPU限制,以及跨请求的持久状态。它们由App Engine自动启动,可以长时间连续运行。每个后端实例都有一个用于请求的唯一URL,您可以跨多个实例对请求进行负载平衡。