【问题标题】:Google App Engine cron with more than 1 minute frequency频率超过 1 分钟的 Google App Engine cron
【发布时间】:2012-02-11 15:35:52
【问题描述】:

在 Google App Engine crons 中,调用处理程序的最高频率为 1m。如果我们希望脚本更频繁地运行,那么让两个 cron 定义每个运行 1 分钟有意义吗?如下:

cron:

  • 描述:cron1 网址:/handle_info 时间表:每 1 分钟一次

  • 描述:cron2 网址:/handle_info 时间表:每 1 分钟一次

还有哪些好的方法?

【问题讨论】:

  • 如果您尝试如此频繁地运行某些东西,您可能需要仔细查看您在做什么,看看您是否可以使其基于事件。任务队列是在需要时运行东西而不是轮询的绝佳选择。

标签: google-app-engine cron


【解决方案1】:

我创建了一个 1 分钟的 cron,然后在应用引擎代码中使用 defer 来引发另一个 pubsub 消息

import logging
import webapp2
import time
import json
import pubsub_utils
from google.appengine.ext import ndb, deferred

def defer_post(item_key=None):
    try:
        logging.info('deferred pubsub')
        pubsub_utils.publish_to_topic(item_key, str(time.time()))
    except Exception as e:
        logging.info('item_key: %s', item_key)
        logging.exception(e)

class PushToPubSub(webapp2.RequestHandler):
    def get(self, topic):
        logging.info('cron pubsub: %s', topic)
        pubsub_utils.publish_to_topic(topic, str(time.time()))
        deferred.defer(defer_post, item_key=topic, _countdown=30)
        self.response.headers['Content-Type'] = 'application/json'
        self.response.write(json.dumps({"status": "200"}))

app = webapp2.WSGIApplication([
    webapp2.Route(r'/publish/<topic>', handler=PushToPubSub)
], debug=True)

【讨论】:

    【解决方案2】:

    我想出了一个想法,使用 Cron 作业每分钟多次执行我的脚本。

    这是我所做的: 我创建了一个 cronjob 来执行一个名为 cron.php 的文件 然后在该文件中,我将最大执行时间更改为 50 秒 然后我创建了一个循环,里面有一个 sleep 命令 每次循环触发时,它都会包含我需要运行的命令。

    代码如下:

    <?PHP
    ini_set('max_execution_time', 50);
    require_once('includes/settings.php'); 
    
    for ($i=1; $i<=5; $i++){
        include('commander.php');
        sleep(10);
    }
    ?>
    

    【讨论】:

      【解决方案3】:

      您可以使用Task Queue API 触发一个任务,该任务使用eta 安排另一个任务

      【讨论】:

      • 它绝对应该每分钟触发处理程序两次,但很可能在同一时间点(即:没有保证它们间隔 30 秒,或者 cron2 在 cron1 之后触发)
      猜你喜欢
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2017-11-30
      相关资源
      最近更新 更多