我的應用程序需要對每個請求執行許多數據存儲操作。我想並行運行它們以獲得更好的響應時間。App引擎上的異步urlfetch
對於數據存儲庫更新,我正在執行批量放入操作,因此它們都是異步發生的,這可以節省許多毫秒。 App Engine允許並行更新up to 500 entities。
但我還沒有找到一個內置的函數,允許不同類型的數據倉庫提取並行執行。
由於App Engine允許urlfetch調用to run asynchronously,我爲每種類型創建了一個getter URL,它將查詢結果作爲JSON格式的文本返回。現在我的應用程序可以對這些可以並行訪問數據存儲區的URL執行異步urlfetch調用。
此技術適用於少量並行請求,但App Engine在嘗試同時運行超過5個或10個這些urlfetch調用時拋出錯誤。
我現在只測試,所以每個urlfetch是相同的查詢;因爲它們可以在小批量中正常工作,但由於同時發生的一些請求而失敗,我認爲它必須與異步urlfetch調用有關。
我的問題是:
- 是否有限定,可以異步運行的urlfetch.create_rpc()調用的次數?
- 同步urlfecth.fetch()函數有一個'deadline'參數,它將允許函數在發生失敗之前等待最多10秒的響應。有什麼辦法可以告訴urlfetch.create_rpc()需要等待多長時間?
- 下面顯示的錯誤是什麼意思?
是否有更好的服務器端技術來並行運行不同類型的數據存儲區提取?
文件 「/base/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py」,線501,在get_result 返回自.__ get_result_hook(個體) 文件「/鹼/ python_lib /版本/ 1 ()('Wait()'請求被來自另一個回調的異常中斷'',DownloadError('的ApplicationError:5」,))
谷歌現在已經解決了這個問題,而不需要像asynctools這樣的第三方工具。你現在可以同時獲取和放置。請參閱SDK 1.5.0版本的發佈說明:http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes「增加了對異步調用數據存儲的db.py支持。可用函數爲get_async() ,put_async(),delete_async(),allocate_ids_async()。在異步數據存儲函數的返回值上調用get_result以阻止該調用。 – 2011-07-06 04:26:23