Beispiel #1
0
class BaseEthServiceWorker:
    def __init__(self, handlers, *, queue_name):
        self._handlers = handlers or []
        self._queue_name = queue_name
        self.worker = None

    def work(self):
        return asyncio.get_event_loop().create_task(self._work())

    async def _work(self):
        await prepare_database(handle_migration=False)
        redis = await prepare_redis()
        self.worker = Worker(self._handlers,
                             queue_name=self._queue_name,
                             connection=redis)
        self.worker.work()

    def shutdown(self):
        return self.worker.shutdown()

    def add_task_handler(self, cls, args=None, kwargs=None):
        if self.worker is None:
            self._handlers.append((cls, args or [], kwargs or {}))
        else:
            self.worker.add_task_handler(cls, args=args, kwargs=kwargs)
Beispiel #2
0
 async def _work(self):
     await prepare_database(handle_migration=False)
     redis = await prepare_redis()
     self.worker = Worker(self._handlers,
                          queue_name=self._queue_name,
                          connection=redis)
     self.worker.work()
Beispiel #3
0
async def test_workers_with_different_queues(redis):

    with Worker([(Handler1, )], queue_name="q1"), Worker([(Handler2, {
            'a': 1,
            'b': 2
    })],
                                                         queue_name="q2"):
        d1 = Dispatcher(queue_name="q1")
        d2 = Dispatcher(queue_name="q2")
        with pytest.raises(TaskError):
            p = await d1.get_vals()
            print(p)
        result = await d1.do_some_work(1, 2, c=3)
        assert result == [1, 2, 3]
        result = await d2.get_vals()
        assert result == {'a': 1, 'b': 2}
Beispiel #4
0
async def test_handler_with_kargs(redis):

    with Worker([(Handler2, {'b': 2})]):
        d = Dispatcher()
        task = d.get_vals()
        result = await task
        assert result == {'a': None, 'b': 2}
Beispiel #5
0
async def test_simple_worker(redis):

    with Worker([Handler1]):
        d = Dispatcher()
        task = d.do_some_work(1, 2, c=3)
        result = await task
        assert result == [1, 2, 3]
Beispiel #6
0
async def test_redis_disconnects_3(redis):

    with Worker([Handler1]):
        d1 = Dispatcher()
        redis.pause()
        t = d1.slow_task()
        await asyncio.sleep(0.5)
        redis.start()
        result = await t
        assert result == 1
Beispiel #7
0
async def test_redis_disconnects(redis):

    with Worker([Handler1]):
        d1 = Dispatcher()
        result = await d1.do_some_work(1, 2, c=3)
        assert result == [1, 2, 3]
        redis.pause()
        await asyncio.sleep(0.1)
        redis.start()
        result = await d1.do_some_work(1, 2, c=3)
        assert result == [1, 2, 3]