我想在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