Проблема публикации в хранилище данных с задачами deferred.defer - PullRequest
1 голос
/ 03 июня 2011

Я пытаюсь сделать это на Google App Engine на Python:

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, оно не работает.Файл выполняется без ошибок. Задачи (в списке «Люди» 200 строк) корректно добавляются в очередь и просачиваются корректно.Но база данных PersonDb не обновляется.Я знаю, что функция работает (вышеизложенное упрощено), потому что это работает:

for person in people:
     add_to_db(person)

Вышеприведенные 2 строки кода работают, и база данных обновляется, но мне нужно запустить это как отложенную задачу.Любые предложения?

ОБНОВЛЕНИЕ : я получаю это в журнале: Файл "C: \ Program Files \ Google \ google_appengine \ google \ appengine \ ext \ deferred \ deferred.py",строка 129, в ходе выполнения поднять PermanentTaskFailure (e) PermanentTaskFailure: у объекта 'module' нет атрибута 'add_to_db'

1 Ответ

2 голосов
/ 05 июня 2011

Это, вероятно, происходит потому, что функция, которую вы пытаетесь отложить (add_to_db), определена в обработчике запросов.Переместите add_to_db в другой модуль (другой файл Python) и импортируйте его оттуда (from myfuncs import add_to_db).

Это ограничение упоминается в разделе ограничений отложенной статьи .

...