我不認爲有任何確定的方法可以知道是否需要get_result()
,除非GAE團隊中有人驗證這一點,但我認爲這不是必需的。這是我如何測試它。
我寫了一個簡單的處理程序:
class DB_TempTestModel(db.Model):
data = db.BlobProperty()
class MyHandler(webapp.RequestHandler):
def get(self):
starttime = datetime.datetime.now()
lots_of_data = ' '*500000
if self.request.get('a') == '1':
db.put(DB_TempTestModel(data=lots_of_data))
db.put(DB_TempTestModel(data=lots_of_data))
db.put(DB_TempTestModel(data=lots_of_data))
db.put(DB_TempTestModel(data=lots_of_data))
if self.request.get('a') == '2':
db.put_async(DB_TempTestModel(data=lots_of_data))
db.put_async(DB_TempTestModel(data=lots_of_data))
db.put_async(DB_TempTestModel(data=lots_of_data))
db.put_async(DB_TempTestModel(data=lots_of_data))
self.response.out.write(str(datetime.datetime.now()-starttime))
我跑了一堆倍高複製的應用。
數據總是存在的,這讓我相信,除非數據存儲方面(不太可能)發生故障,否則會寫入數據。
以下是有趣的部分。當用put_async()
(?a=2
)寫入數據時,(處理請求的)時間的平均速度約爲put()
(?a=1
)的2到3倍(不是一個非常科學的測試 - 只是目測它)。
但是cpu_ms
和api_cpu_ms
對於?a=1
和?a=2
都是相同的。
從日誌:
ms=440 cpu_ms=627 api_cpu_ms=580 cpm_usd=0.036244
VS
ms=149 cpu_ms=627 api_cpu_ms=580 cpm_usd=0.036244
在客戶端,看着請求的網絡延遲,它顯示了同樣的結果,即`? a = 2'的請求速度至少要快2倍。絕對是客戶端的勝利......但在服務器端似乎沒有任何收益。
GAE團隊的任何人都在關心評論嗎?
這是不是一個錯誤;它是記錄的行爲。 dev_appserver是單線程的,而異步urlfetch僅僅是模擬的。 – geoffspear 2012-06-25 17:03:12
@Wooble可以將我指向關於特殊本地開發服務器行爲的文檔嗎?我會直接關閉叢林(順便說一句:我指的是''db.put_async''和0影響) – lukmdo 2012-06-25 23:49:13
Err,我誤讀了; asych urlfetch的這種行爲被記錄在案;它似乎沒有爲異步數據存儲記錄(儘管dev_appserver的單線程本身被記錄下來,似乎沒有在異步行爲的文檔中提及)。 – geoffspear 2012-06-26 01:33:48