使用deferred.defer任务过帐到数据存储区时出现问题

时间:2011-06-03 09:40:43

标签: python google-app-engine scheduled-tasks datastore deferred

我正在尝试使用Python在Google App Engine上执行此操作:

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 \ google_appengine \ google \ appengine \ ext \ deferred \ deferred.py”,第129行     提出PermanentTaskFailure(e) PermanentTaskFailure:'module'对象没有属性'add_to_db'

1 个答案:

答案 0 :(得分:2)

这可能正在发生,因为您尝试推迟的函数(add_to_db)是在请求处理程序中定义的。将add_to_db移动到另一个模块(另一个python文件)并从那里导入(from myfuncs import add_to_db)。

延迟article的限制部分提到了此限制。