1

我正在尝试在 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 作业运行上述代码时,它不起作用。该文件执行没有错误,任务(列表“人员”中有 200 个字符串)被正确添加到队列中并正确地通过。但是数据库 PersonDb 没有得到更新。我知道该功能有效(以上已简化),因为它有效:

for person in people:
     add_to_db(person)

以上 2 行代码有效,并且数据库得到更新,但我需要将其作为延迟任务运行。有什么建议么?

更新:我在日志中得到这个:文件“C:\Program Files\Google\google_appengine\google\appengine\ext\deferred\deferred.py”,第 129 行,在运行 raise PermanentTaskFailure(e) PermanentTaskFailure: 'module'对象没有属性“add_to_db”

4

1 回答 1

2

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

此限制在延期文章的限制部分中提到。

于 2011-06-05T04:07:20.347 回答