python - 使用 deferred.defer 任务发布到数据存储时出现问题

标签 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 行,运行中 引发永久任务失败(e) PermanentTaskFailure:“模块”对象没有属性“add_to_db”

最佳答案

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

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

关于python - 使用 deferred.defer 任务发布到数据存储时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6225400/

相关文章:

python - 在生产环境中在 Windows 上部署 Flask

python - 从命令行调用 Python 脚本时有没有办法实现 **kwargs 行为

python - 如何在 Django 中为我的模型设置两个主键字段?

javascript - 在 AngularJS $http GET 中传递变量?

amazon-web-services - 使用任何 Amazon Web Services,我如何安排 1 年后发生的事情?

python - 在 Windows 7 上使用 Python CronTab 调度 Python 脚本

python - 如何计算 Django 中的 Frechet 距离?

google-app-engine - 将用户名存储为单独的名字/姓氏,还是单个全名字符串?

google-app-engine - 启动 GAE/GWT 项目时出错 : Unable to restore the previous TimeZone

node.js - 动态更新nodejs cronjob周期