Cron Google App Engine с частотой более 1 минуты - PullRequest
0 голосов
/ 16 января 2012

В кронах Google App Engine самая высокая частота вызова обработчика составляет 1 м. Если мы хотим, чтобы скрипт запускался чаще, имеет ли смысл иметь два определения cron, каждое из которых выполняется по 1 минуте? Как ниже:

хроны:

  • описание: cron1 URL: / handle_info расписание: каждую 1 минуту

  • описание: cron2 URL: / handle_info расписание: каждую 1 минуту

Какие другие хорошие подходы?

Ответы [ 3 ]

3 голосов
/ 16 января 2012

Вы можете запустить задачу, используя API очереди задач , который планирует другую задачу, используя eta

1 голос
/ 04 апреля 2014

Мне пришла в голову идея использовать задания Cron для выполнения моего скрипта чаще, чем раз в минуту.

Вот что я сделал: я создал cronjob для выполнения файла с именем cron.php. Затем внутри этогоФайл Я изменил максимальное время выполнения до 50 секунд. Затем я создал цикл с командой сна внутри него. И каждый раз, когда цикл запускается, он включает команды, которые мне нужно выполнить.

Вот код:

<?PHP
ini_set('max_execution_time', 50);
require_once('includes/settings.php'); 

for ($i=1; $i<=5; $i++){
    include('commander.php');
    sleep(10);
}
?>
0 голосов
/ 22 марта 2018

Я создал 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...