Google App Engine cron的频率超过1分钟

时间:2012-01-16 18:08:32

标签: google-app-engine cron

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

的cron:

  • 描述:cron1 url:/ handle_info 时间表:每1分钟

  • 描述:cron2 url:/ handle_info 时间表:每1分钟

还有什么其他好办法?

3 个答案:

答案 0 :(得分:3)

您可以使用Task Queue API使用eta<来计划其他任务来发起任务。现在+ 1分钟。

答案 1 :(得分:1)

我提出了一个想法,即每分钟使用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);
}
?>

答案 2 :(得分:0)

我创建了一个1分钟的cron然后在app引擎代码中使用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)