Google App Engine deferred.defer () завершается ошибкой при возврате метода - PullRequest
3 голосов
/ 07 февраля 2011

Я пытаюсь использовать 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

Здесь я вызываю defer:

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

buildGames () вернет True после завершения.

Ответы [ 2 ]

10 голосов
/ 07 февраля 2011

Вы должны использовать:

result = deferred.defer(meeple_tasks.buildGames)

Если вы используете buildGames(), то тут и там вызывается функция , передавая возвращаемое значение в defer().Удаляя скобки, вы передаете саму функцию для отсрочки.

2 голосов
/ 07 февраля 2011

Вам нужно вызвать свою отложенную задачу следующим образом:

deferred.defer(meeple_tasks.buildGames)

«obj должно быть вызываемым» означает, что (в вашем случае) значение True не может быть вызвано.Как я написал отложенный вызов с помощью «defer» вызова метода buildGames для другого процесса (или задачи), вставив его в очередь и позволив инфраструктуре AppEngine справиться с этим.

Обратите внимание, что вы ничего не можете вернуть с отложеннымзадачи.Они будут работать в другом процессе и, возможно, на совершенно другом сервере.Согласно документации, они являются фоновыми работниками.

...