2011-02-07 16 views
3

我試圖使用google.appengine.ext.deferred來運行任務。我傳遞一個方法的延遲()方法,而該方法成功運行,但回國後,一個ValueError被拋出:Google App Engine deferred.defer()在方法返回時失敗

File ".../admin.py", line 73, in post 
    result = deferred.defer(meeple_tasks.buildGames()) 
     File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/deferred/deferred.py", line 198, in _curry_callable 
     raise ValueError("obj must be callable") 
    ValueError: obj must be callable 

這裏就是我所說的延遲:

result = deferred.defer(meeple_tasks.buildGames()) 

buildGames( )完成後將返回True。

回答

10

你應該使用:

result = deferred.defer(meeple_tasks.buildGames) 

如果使用buildGames(),調用該函數,然後有,在返回值傳遞給defer()。通過刪除括號,您可以傳遞函數來推遲。

2

你需要打電話給你延期的任務是這樣的:

deferred.defer(meeple_tasks.buildGames)

「OBJ必須是可調用」的意思是(你的情況)真值是不可調用的。我如何編寫延遲調用,將「buildGames」方法調用推遲到另一個進程(或任務),方法是將其插入隊列中並讓AppEngine框架處理它。

請注意,您不能使用延遲任務返回任何內容。他們將運行在不同的進程上,可能在完全不同的服務器上運行。根據文檔,他們是後臺工作人員。