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)
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()