方法返回时,Google App Engine deferred.defer()失败

时间:2011-02-07 17:51:39

标签: python google-app-engine exception task

我正在尝试使用google.appengine.ext.deferred来运行任务。我将一个方法传递给defer()方法,该方法成功运行,但返回时,抛出一个ValueError:

  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。

2 个答案:

答案 0 :(得分:10)

您应该使用:

result = deferred.defer(meeple_tasks.buildGames)

如果您使用buildGames(),则会立即调用函数,并将返回值传递给defer()。通过删除括号,您可以将函数本身传递给延迟。

答案 1 :(得分:2)

您需要像这样调用延期任务:

deferred.defer(meeple_tasks.buildGames)

“obj必须是可调用的”意味着(在您的情况下)值True不可调用。我如何编写延迟调用,将buildGames方法调用“推迟”到另一个进程(或任务),方法是将其插入队列并让AppEngine框架处理它。

请注意,您无法使用延迟任务返回任何内容。它们将运行在不同的进程上,可能在完全不同的服务器上运行。根据文档,他们是背景工作者。