我有一些代碼,大概做了這樣的GAE工人的任務裏面:在Google App Engine上創建大批數據存儲對象的最有效的內存方式是什麼?
list_of_dicts = xmlrpc_call(...)
objects_to_put = []
for row in list_of_dicts.items():
object = DatastoreModel(**row)
object.x = ...
objects_to_put.append(object)
db.put(objects_to_put)
我也試過這樣:
list_of_dicts = xmlrpc_call(...)
objects_to_put = []
for row in list_of_dicts.items():
object = DatastoreModel(**row)
object.x = ...
objects_to_put.append(object)
if len(objects_to_put) > 10:
db.put(objects_to_put)
objects_to_put = []
db.put(objects_to_put)
(這個想法是把所有的10個對象,以避免有一個巨大的名單)
問題,總是,這個代碼塊顯然佔用大量的內存,即使列表是相對較小(~100項),並在拉斯維加斯的每個項目t只包含幾個鍵。沒有大的斑點,大塊的字符串,或者其他任何東西,但相對較小的土豆數據結構。
是什麼導致這名工人每次運行時超過其內存配額,我怎麼能高效地創建數據存儲對象的一個比較大的(〜100左右)是多少?
這是唯一的請求嗎?你確定這是罪魁禍首嗎?其他處理程序呢? – 2012-01-15 22:59:22
很明顯,這是一個要求。我並沒有完全排除在該請求中可能會發生其他問題,但這似乎不太可能。這是一個工作者請求,它簡單地引入一些xmlrpc,並將其轉換爲datastrore對象。 – 2012-01-16 22:17:05