1

我想在Python做到這一點在谷歌App Engine的數據存儲區:問題發佈使用deferred.defer任務

def add_to_db(person): 
    a = PersonDb(key_name = person) 
    # get some data 
    data1 = a.name 
    data2 = a.age 
    a.put() 

for person in people: 
    deferred.defer(add_to_db, person, _queue="myque") 

當我通過一個cron作業運行上面的代碼它不工作。該文件執行時沒有錯誤,任務(列表'People'中有200個字符串)被正確添加到隊列中並正確地通過。但數據庫PersonDb不會更新。我知道函數工作(上面是簡化的),因爲這個工程:

for person in people: 
    add_to_db(person) 

上述兩行的代碼的工作,並且數據庫被更新,但我需要運行這個作爲遞延任務。有什麼建議麼?

更新:我在日誌中得到這樣的: 文件 「C:\ Program Files文件\谷歌\ google_appengine \谷歌\ AppEngine上\分機\延期\ deferred.py」,線路129,在運行 提高PermanentTaskFailure (五) PermanentTaskFailure:「模塊」對象有沒有屬性「add_to_db」

+1

你顯然忽略了很多重要的東西 - 什麼是「a」?我們真的需要看到您的_actual_代碼來提供幫助。然而,放棄數據存儲幾乎沒有任何意義 - 它只會讓你很少,甚至會失去一些性能。 – 2011-06-03 09:59:35

+0

您的隊列名稱應該作爲'_queue'傳遞,而不是'queue'。 – 2011-06-03 13:57:13

+0

@尼克'a'是一個模型類。 – Doug 2011-06-03 19:51:15

回答

2

這可能發生,因爲你正試圖推遲(add_to_db)功能在請求處理程序中定義。將add_to_db移動到另一個模塊(一個不同的python文件)並從那裏導入(from myfuncs import add_to_db)。

此限制在推遲article的限制部分中提及。

+0

感謝。 – Doug 2011-06-05 21:48:15