Exemple #1
0
class DemoQueueWorker:
    R = None
    total = 0
    counter = 0
    id = None

    def __init__(self, id=-1):
        self.id = id
        self.R = Redis().Connection

    def start(self):
        print('starting job id: ' + str(self.id))
        self.R.sadd(RUNNING, self.id)
        self.alive()
        return self.perform_task()

    def alive(self):
        Redis().get_or_set("STARTTIME:DEMO:" + str(self.id), datetime.now())
        self.R.setex(
            str(self.id),
            30,
            json.dumps({
                'id': self.id,
                'count': self.counter,
                'last_total': self.total,
                'last_update': str(datetime.now())
            }),
        )

    def perform_task(self):
        while self.total <= 21:
            if self.counter > 6:
                self.counter = 0
                print('Seven hits and still didn\'t bust for ID: ' +
                      str(self.id))
                time.sleep(60)
                return False
            add_me = randrange(1, 11)
            self.counter += 1
            time.sleep(randint(1, 10))
            self.total += add_me
            self.alive()

        self.cleanup()
        return True

    def cleanup(self):
        self.counter = 0
        """
        message = {'flash_color': 'green',
                   'base_color': 'teal',
                   'interval': 0.3,
                   'count': 1
                   }
        Redis().publish("BlinkBlock", message)
        """
        self.R.srem(RUNNING, self.id)
        self.R.sadd(COMPLETE, self.id)
        c = self.R.get("COMPLETED:DEMO:COUNT")
        if c is not None:
            self.R.set("COMPLETED:DEMO:COUNT", int(c) + 1)
        else:
            self.R.set("COMPLETED:DEMO:COUNT", 1)
        if self.id in self.R.smembers(REQUEUE):
            self.R.srem(REQUEUE, self.id)
            self.R.set("COMPLETED:DEMO:COUNT", int(c) + 1)
        self.R.set("ENDTIME:DEMO:" + str(self.id), datetime.now())
Exemple #2
0
class BabyNamesWorker:
    total = 0
    counter = 0

    def __init__(self, year, gender, locale):
        self.R = Redis().Connection
        self.year = year
        self.gender = gender
        self.locale = locale
        self.json_obj = json.dumps({
            "locale": self.locale,
            "year": self.year,
            "gender": self.gender
        })

    def start(self):
        print('starting job: ' + self.json_obj)
        self.R.sadd(RUNNING, self.json_obj)
        self.alive()
        return self.perform_task()

    def alive(self):
        self.R.setex(
            str(json.dumps({
                "locale": self.locale,
                "year": self.year,
                "gender": self.gender
            })),
            30,
            json.dumps(
                {
                    'count': self.counter,
                    'last_total': self.total,
                    'last_update': str(datetime.now())
                }
            ),
        )

    def perform_task(self):
        self.alive()
        babynames_task.prepopulate_cache(self.year, self.gender, self.locale)
        self.cleanup()
        return True

    def cleanup(self):
        self.counter = 0
        """message = {'flash_color': 'yellow',
                                           'base_color': 'purple',
                                           'interval': 0.05,
                                           'count': 1
                                           }
        Redis().publish("BlinkBlock", message)"""
        self.R.srem(RUNNING, self.json_obj)
        self.R.srem(REQUEUE, self.json_obj)
        self.R.sadd(COMPLETE, self.json_obj)
        c = self.R.get("COMPLETED:BABYNAMESCACHE:COUNT")
        if c is not None:
            self.R.set("COMPLETED:BABYNAMESCACHE:COUNT", int(c) + 1)
        else:
            self.R.set("COMPLETED:BABYNAMESCACHE:COUNT", 1)
        if self.json_obj in self.R.smembers(REQUEUE):
            # fc = int(self.R.Connection.get("failed_count").decode('utf8'))
            # self.R.Connection.set("failed_count", fc - 1)
            self.R.srem(REQUEUE, self.json_obj)