我正在尝试使用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'
答案 0 :(得分:2)
这可能正在发生,因为您尝试推迟的函数(add_to_db
)是在请求处理程序中定义的。将add_to_db
移动到另一个模块(另一个python文件)并从那里导入(from myfuncs import add_to_db
)。
延迟article的限制部分提到了此限制。