def scheduler_process(queue, ppid): """ Процесс для работы планировщика """ ram_class = import_class(settings.SCHEDULER_RAM_STORAGE) persist_class = import_class(settings.SCHEDULER_PERSISTENT_STORAGE) scheduler = Scheduler( ram_storage=ram_class(), persist_storage=persist_class( settings.SCHEDULER_DB_PERSISTENT_STORAGE, pool_recycle=settings.POOL_RECYCLE, pool_size=settings.POOL_SIZE ) ) # Thread for immediate running of incoming commands Thread(target=inc_message_thread, args=(queue, scheduler, )).start() logging.info("Restoring previous events...") scheduler.restore() logging.info("Restoring completed.") period = 15 if settings.DEBUG is False else 5 start_time = time.time() counter = 0 while 1: # Kill himself if parent is killed if os.getppid() != ppid: sys.exit() #do something events = scheduler.get_events() for event in events: scheduler.mark_as_processing(event.event_id) logging.debug("Event (id=%s) marked as processing", event.event_id) logging.debug("Sending event (id=%s) to posting queue...", event.event_id) message = dict(event_id=event.event_id) message.update(event.data) send_to_queue(settings.RABBITMQ_HOST, settings.POSTING_QUEUE, message) allowance = time.time() - counter*period - start_time logging.debug(" [x] allowance = %s, counter = %s, per cent of period = %s", allowance, counter, int(allowance/period * 100)) if allowance > period/3.0: if period - allowance >= 0.0: time.sleep(period - allowance) else: time.sleep(0.1) counter = -1 start_time = time.time() else: time.sleep(period) counter += 1
class RestoreTestCase(PersistMixin, TestCase): N = 100 def setUp(self): self.ram = self.create_ram() self.persist = self.create_persist() self.scheduler1 = Scheduler(ram_storage=self.create_ram(), persist_storage=self.persist) self.trigger_time = int(time() + 600) for i in xrange(self.N): self.scheduler1.add(trigger_time=self.trigger_time, ev_index=i, ev_data=[{'%s' % i: i}]) self.scheduler2 = Scheduler(ram_storage=self.create_ram(), persist_storage=self.persist) def test_restore(self): self.scheduler2.restore() events = self.scheduler2.get_events(self.trigger_time) self.assertEqual(len(events), self.N) for event in events: self.assertEqual(event.data.ev_data[0][str(event.data.ev_index)], event.data.ev_index)
from scheduler.core import Scheduler from scheduler.storage.ram import RBTreeStorage from scheduler.storage.persist import DBPersistStorage from time import time from random import randint N = 100 scheduler = Scheduler(ram_storage=RBTreeStorage(), persist_storage=DBPersistStorage('mysql://*****:*****@localhost/liketools')) start = time() print "Start restoring..." scheduler.restore() print "Restored..." print "Restoring takes ", (time() - start), " seconds" s = 0.0 for i in xrange(N): start = time() events = scheduler.get_events(randint(0, int(start))) s = time() - s print "Average get_events() duratios is ", (s/N), "seconds"