(ndb,python,gae) - 使用多个模块的cron作业超时

时间:2015-12-22 21:31:20

标签: python google-app-engine cron

在处理分离模块的cron作业时,我需要做些什么特别的事情吗?我无法弄清楚为什么我可以在localhost上向cron作业发出请求:8083 / tasks / crontask(localhost:8083运行工作模块),它应该只是打印一条简单的行,而且它不打印到控制台,虽然它说请求成功,如果我通过转到http://localhost:8000/cron并点击运行按钮运行它..但即使这仍然没有命中使它打印到控制台。

如果我刷新页面localhost:8083 / tasks / crontask作为触发cron作业的一种方式,它会超时。

再次,如果我转到localhost:8001并点击运行按钮,它表示对/ tasks / crontask的请求是成功的,但它不会打印到控制台,就像它应该

在workers / handlers目录下的send_notifications_handler.py中

class CronTaskHandler(BaseApiHandler):

    def get(self):

        print "hello, this is a cron job"
在worker模块外的cron.yaml中

cron: 

- description: something

  url: /tasks/crontask

  schedule: every 1 minutes

  target: workers
在worker / handlers目录的init.py中

from send_notifications_handler import CronTaskHandler

#--- Packaging



__all__ = [

    CounterWorker,

    DeleteGamesCronHandler,

    CelebrityCountsCronTaskHandler,

    QuestionTypeCountsCronHandler,

    CronTaskHandler

]

in workers / routes.py

 Route('/tasks/crontask', handlers.CronTaskHandler, methods=['GET']),

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  1. print语句很好,可以打印到控制台

  2. 是的,cron作业会在使用dev服务器时触发一次,虽然它不会重复

  3. 问题是该模块中的_ah / start被路由到一个永不停止的拉取队列。删除拉取队列解决了问题。

2 个答案:

答案 0 :(得分:0)

这实际上是在本地执行cron作业时的预期行为。

如果您查看docs,请说明以下内容:

  

开发服务器不会自动运行您的cron作业。您可以使用本地桌面的cron或计划任务界面,使用curl或类似工具触发作业的网址。

如您在帖子中所述,您需要访问http://localhost:8000/cron,在本地服务器上手动执行cron作业。

答案 1 :(得分:0)

/ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  1. print语句很好,可以打印到控制台

  2. 是的,使用开发服务器时,cron作业将触发一次,虽然它不重复,这是开发服务器的正常行为

  3. 问题是该模块中的_ah / start被路由到一个永不停止的拉取队列。删除拉取队列解决了问题。

  4. 感谢您的建议