【问题标题】:Google App Engine: Cron handler is called by cron, but no code is runGoogle App Engine:cron 处理程序由 cron 调用,但未运行任何代码
【发布时间】:2011-09-28 09:08:26
【问题描述】:

我有以下问题。我已经在 Google App Engine 中定义了一个 cron 作业,但是我的 get 方法没有被调用(或者准确地说,它每隔一次被调用一次 - 如果我手动运行它,它在第一次不会做任何事情,但在第二次它完美无缺)。这是 cron 调用的日志输出:

2011-07-04 11:39:08.500 /suggestions/ 200 489ms 70cpu_ms 0kb AppEngine-Google; (+http://code.google.com/appengine)
0.1.0.1 - - [04/Jul/2011:11:39:08 -0700] "GET /suggestions/ HTTP/1.1" 200 0 - "AppEngine-Google; (+http://code.google.com/appengine)" "bazinga-match.appspot.com" ms=489 cpu_ms=70 api_cpu_ms=0 cpm_usd=0.001975 queue_name=__cron task_name=a449e27ff383de24ff8fc5d5f05f2aae

如您所见,它在/suggestions/ 上发出GET 请求,但没有任何反应,包括我的日志消息(当我第二次手动运行时它们被打印出来)。您知道为什么会发生这种情况吗?

我的处理程序:

class SuggestionsHandler(RequestHandler):

    def get(self):
        logging.debug('Creating suggestions')
        for key in db.Query(User, keys_only=True).order('last_suggestion'):
            make_suggestion(key)
        logging.debug('Done creating suggestions')
        print
        print('Done creating suggestions')

这是我的 cron.yaml:

cron:
- description: daily suggestion creation
  url: /suggestions/
  schedule: every 6 hours

和我的 app.yaml 的适当部分:

- url: /suggestions/
    script: cron.py
    login: admin

【问题讨论】:

    标签: google-app-engine cron handler


    【解决方案1】:

    您在处理程序文件底部的main 之后缺少此声明:

    if __name__ == '__main__':
      main()
    

    第一次运行处理程序脚本时,App Engine 会简单地导入它,然后这个 sn-p 会在这种情况下运行您的 main。在后续请求中,App Engine 会运行 main 函数(如果您定义了一个)。

    【讨论】:

    • 哇!这是非常出乎意料的。非常感谢,很高兴在 StackOverflow 上获得 Google 开发人员的直接支持。今晚我将尝试在我的项目中解决这个问题 ;-)
    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多