def load_period_times(): pt = [] with db.atomic(): for i in Period.select(): pt.append(i.start_time) pt.append(i.end_time) with pt_lock: period_times[:] = pt cr = cron.Cron(get_cron()) cr.start()
def __init__(self, raw, archiver): self.destinations = [] st = raw self.full_cycle = 7 self.archiver = archiver self.used_types = set() while st: if st[0] != '<': raise DestinationSyntaxError, 'starting "<" missing' try: pos = st.index('>') except ValueError: raise DestinationSyntaxError, 'a ">" is missing' selector = st[1:pos] st = st[pos + 1:] pos = st.find('<') if pos >= 0: target = st[:pos] st = st[pos:] else: target = st st = '' typ, period = selector.split('=', 1) try: if typ.lower() == 'none': typ = 'none' else: typ = self.archiver.types[typ.lower()] except KeyError: raise DestinationSyntaxError, 'type "%s" unknown' % (typ, ) self.used_types.add(typ.lower()) #print "SELECTOR<%s=%s>%s" % (typ,period,target ) #print "CARRY=%s" % st period = cron.Cron(period) if period.weekdivisor != None: self.full_cycle = max(self.full_cycle, period.weekdivisor * 7) if period.months: self.full_cycle = max(self.full_cycle, 63) self.destinations.append((typ, period, target))
def test_cron_daemon(): dct = {} def cmd(): dct['it works!'] = True daemon = cron.Cron() daemon.add('@reboot', cmd) daemon.start() for i in range(60): time.sleep(1) if 'it works!' in dct: break assert dct.get('it works!', False) daemon.stop()
import datetime import cron q = [((datetime.datetime.now() + datetime.timedelta(seconds=5)).time(), lambda: print('abc')), ((datetime.datetime.now() + datetime.timedelta(seconds=10)).time(), lambda: print('def'))] c = cron.Cron(q) c.start() import time time.sleep(100)
<p>Pour vous inscrire, envoyez un message privé à l'utilisateur ConfiBot qui se trouve sur notre <a href="https://discord.h25.io">serveur Discord</a>, qui vous répondra avec un token secret et l'équipe dont vous faites partie.</p> <p>ConfiBot vous ajoute automatiquement au channel privé pour discuter avec le reste de votre équipe, par exemple <i>#configame-orange</i>.</p> <h2>Détails techniques</h2> <p>Pour placer votre pion, vous pouvez utiliser l'URL suivante : <pre>http://configame.h25.io/setPosition?x={x pion}&y={y pion}&token={votre token secret}</pre><b>Il n'est possible de se déplacer que de 20 unités à la fois</b> (comptées en <a href="https://fr.wikipedia.org/wiki/Distance_de_Manhattan">distance de Manhattan</a>). Si vous souhaitez vous déplacer à plus de 20 unités de distance, vous pouvez passer un tour mais vous ne recevrez aucun point pendant ce tour.</p> <p>Chaque tour dure une minute, et vous ne connaissez pas les positions des autres au tour actuel. Cependant, l'URL <pre>http://configame.h25.io/getPreviousTick</pre> vous permettra de récupérer les positions de chacun au tour précédent.</p> <p>Si vous avez des difficultés à jouer ou à automatiser vos requêtes, n'hésitez pas à demander à votre équipe dans le channel dédié !</p> <p>Le jeu est seulement actif pendant les ConfiStreams, le serveur ne répondra généralement pas aux requêtes en dehors des horaires de stream.</p> </body> <script> setTimeout(function(){ window.location.reload(1); }, 30000); </script> </html>''' @app.after_request def add_header(r): r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" r.headers["Pragma"] = "no-cache" r.headers["Expires"] = "0" r.headers['Cache-Control'] = 'public, max-age=0' return r daemon = cron.Cron() daemon.add('* * * * *', doTick) daemon.start() app.run('0.0.0.0', port=80, debug=False, threaded=True)
def test_cron_stop(): daemon = cron.Cron() daemon.start() daemon.stop() assert not daemon.thread.isAlive()