我想在appengine上连续运行一个程序。这个程序会自动抓取一些网站并将数据存储到它的数据库中。是否有可能让程序继续在appengine上继续执行?或者将appengine杀死进程?在appengine上的履带
注:将被抓取该网站没有存储在AppEngine上
我想在appengine上连续运行一个程序。这个程序会自动抓取一些网站并将数据存储到它的数据库中。是否有可能让程序继续在appengine上继续执行?或者将appengine杀死进程?在appengine上的履带
注:将被抓取该网站没有存储在AppEngine上
我希望AppEngine上continiously 运行的程序。
不能。
你可以得到最接近的是后台运行scheduled tasks,去年no more than 30 seconds:
值得注意的是,这意味着单个任务的执行生存期 是 限制为30秒。如果您的任务 执行时间接近30秒限制,则 App Engine将引发异常 ,您可能会捕获该异常,然后快速 保存您的工作或日志进程。
1到这种可能的重复。您可以安排任务在网站上定期运行,这应该足够了,但您无法连续抓取网页。如果该页面支持PubSubHubBub(http://code.google.com/p/pubsubhubbub/)或其他推送技术,则可以让您的应用程序订阅更新并在页面实际更改时进行抓取。 – 2010-06-21 19:40:30
对于爬行,我认为任务队列比单个守护进程更有效。它为你处理并行性,任务模型非常适合爬行。 – 2010-06-22 07:57:01
@请问后端怎么样? – Michael 2011-07-11 01:22:54
你不能从字面上运行一个连续的过程超过30秒。但是,您可以使用任务队列让一个进程调用连续链中的另一个进程。或者,您可以安排工作与Cron服务一起运行。
使用cron作业来定期检查过去n小时/天/无论何时未被抓取的页面,并将这些页面的某些子集的抓取任务放到任务队列中。这样,你的流程不会因为花费太长时间而被杀死,而且你不会因为流量过大而捣乱你所刮的服务器。
我已经完成了这个工作,它工作得很好。注意任务超时;如果事情花费太长时间,请将它们分成多个阶段,并确保使用memcached。
我的一个朋友建议下
你可以无限地运行你的工作。您只需考虑使用的CPU时间和存储。
试试这个:
在appengine上运行任何程序。你从浏览器连接,在ajax期间点击开始url。 Ajax呼叫服务器,从互联网下载一些数据并返回给您(您的浏览器)下一个网址。这不是一个请求,每个url都是一个不同的请求。您只能在JS中解析ajax如何调用url un cycle。
您可以使用称为后端的历史GAE服务。检查此http://code.google.com/appengine/docs/java/backends/ 后端是特殊的App Engine实例,它们没有请求最后期限,更高的内存和CPU限制以及跨请求的持久状态。它们由App Engine自动启动,并可以长时间连续运行。每个后端实例都有一个唯一的URL用于请求,并且可以跨多个实例负载平衡请求。
您可能会考虑在较新版本的GAE中引入Backends。
这些运行的连续过程
是可能是,我已经建立在AppEngine上的解决方案 - wowprice
共享所有的细节在这里会让我的回答冗长,
问题 -假设我想抓取walmart.com,因为我知道我不能一次抓取(百万产品)
解决方案 -我设计了我的蜘蛛来打破小任务中的任务。
优势 - 我们可以爬在不破坏30秒规则,爬行意志的速度取决于后台的机器,它将提供并行抓取单一目标。
他们给你修好了。 您可以在手动缩放实例上运行后台线程。
检查https://developers.google.com/appengine/docs/python/modules/#Python_Background_threads
的[AppEngine上后台任务(http://stackoverflow.com/questions/149307/background-tasks-on-appengine) – 2010-06-21 19:40:31