GAEのcron
http://d.hatena.ne.jp/nishiohirokazu/20090308/1236495788
んーっと。
まあ現状だとurlfetchでまわすしかないよね。
適当な擬似コードで
@expose('/admin/cronstart/') def start(req): if not memcache.get('start'): memcache.set('start', 1) return redirect('/crond/') return Response("cron started") @expose('/admin/cronstop/') def stop(req): memcache.delete('start') return redirect('/') @expose('/crond/') def task(req): if memcache.get('start'): #check #cron.Cron() get_url('/sleep/') return Response("", mimetype="text/html") @expose('/sleep/') def sleep(req): time.sleep(10) get_url('/crond/') return Response("", mimetype="text/html") def get_url(url): try: if not url.startswith('/'): url = '/' + url url = 'http://' + str(os.environ['HTTP_HOST']) + url urlfetch.fetch(url) except Exception, e: pass
一応、本番環境でも怒られずにぐるぐると回るよ。
すでにスケジューラーappはいくつか存在してるし。
ぐるぐる回るので時間のチェックにmemcached使ってもいいし時間で見てもいいかなー。
追記:
urlfetchでタイムアウトは必ず発生するのでtry...exceptしておく部分を追記。