我想继续在appengine上运行一个程序。这个程序会自动抓取一些网站并将数据存储到它的数据库中。该程序是否有可能 不断地继续在appengine上做这件事吗?还是会让appengine杀死这个过程?
注意:将要抓取的网站不会存储在appengine上
答案 0 :(得分:8)
我想要不断地运行一个程序 关于appengine。
<强>无法强>
您可以获得的最接近的是scheduled tasks后台no more than 30 seconds:
值得注意的是,这意味着一生 单个任务的执行是 限制为30秒。如果你的任务 执行接近30秒的限制, App Engine将引发异常 你可以赶上然后快点 保存您的工作或日志过程。
答案 1 :(得分:2)
我的一位朋友建议关注
你可以无限地完成工作。您只需要考虑使用的CPU时间和存储空间。
答案 2 :(得分:1)
您可能需要考虑在较新版本的GAE中引入的后端。
这些运行连续过程
答案 3 :(得分:1)
可能是,我已经在Appengine上构建了一个解决方案 - wowprice
在这里分享所有细节将使我的答案很长,
问题 - 假设我想抓取walmart.com,因为我知道我不能一次抓取(数百万种产品)
解决方案 - 我设计了我的蜘蛛来完成较小任务的任务。
优势 - 我们可以在不破坏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,您可以跨多个实例对请求进行负载平衡。