在Google App Engine中,调用处理程序的最高频率为1米。如果我们希望脚本更频繁地运行,那么每个运行1分钟的两个cron定义是否有意义?如下所示:
的cron:
描述:cron1 url:/ handle_info 时间表:每1分钟
描述:cron2 url:/ handle_info 时间表:每1分钟
还有什么其他好办法?
答案 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)