Пример #1
0
    def _run(self):
        messenger = Messenger(db.get_session())
        running_jobs = set()

        for dest in self._mapping:
            messenger.subscribe(dest)

        counter = 0
        while self._running:
            print 'counter = ', counter
            counter += 1
            messages = messenger.recv()
            for msg in messages:
                running_jobs.add((msg, self._dispatch_job(msg)))

            gevent.sleep(0.01)
            done = gevent.joinall(
                [j[1] for j in running_jobs],
                timeout=0,
            )

            for j in done:
                for msg, job in running_jobs:
                    if j == job:
                        running_jobs.remove((msg, job))
                        messenger.retire(msg.id)
                        break

            while self._outgoing_messages:
                to, params = self._outgoing_messages.pop()
                messenger.send(to, **params)
Пример #2
0
def test_retire(session):
    m = Messenger(session)
    sent_id = m.send('test_retire', a='a', b=1)
    m.subscribe('test_retire')
    m.retire(sent_id)

    assert not m.recv()