【问题标题】:How to use GAE deferred functionality?如何使用 GAE 延迟功能?
【发布时间】:2012-03-06 20:14:07
【问题描述】:

我执行以下操作:

from google.appengine.ext import deferred

def send_message(client_id, message):
    logging.info("sending message...")

class MyHandler(webapp.RequestHandler):
    def get(self, field_name):
        ...
        scUpdate = {
                       'val': value,
                       'name': field_name_converted
                   }
        message = simplejson.dumps(scUpdate)                      
        deferred.defer(send_message, client_id, message, _countdown=random.randrange(0, 5, 1))

得到

PermanentTaskFailure: 'module' object has no attribute 'send_message'

这里有什么问题?

更新。看起来问题与那里描述的相同 - PermanentTaskFailure: 'module' object has no attribute 'Migrate' - 但我不明白如何解决这个问题。

【问题讨论】:

  • 我认为尼克对该链接答案的评论非常清楚 - 您不能使用在您直接用作 app.yaml 处理程序的模块中定义的函数。将其移至其他文件并导入。
  • @DanielRoseman,这是唯一可能的方法吗?那么,我将在 2 个不同的文件中拥有相同的功能吗?直接使用Task Queue会更好吗?
  • 为什么会在两个文件中?将代码移动到单独的文件中,不要复制。
  • @DanielRoseman,我想说MyHandler 将在一个文件中,而send_message 应该在第二个文件中。看起来不太好。

标签: python google-app-engine task-queue deferred


【解决方案1】:

https://developers.google.com/appengine/articles/deferred:

延迟库的限制

  • 您不能在请求处理程序模块中调用方法。

通过 deferred.defer 调用的函数不能在同一个 类似于调用 deferred.defer 的请求处理程序的模块。

【讨论】:

  • 好的,谢谢。我用taskqueuecountdown 代替,效果很好。
猜你喜欢
  • 2011-05-02
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2013-05-28
相关资源
最近更新 更多