def task_message_handler(message, body, ack, to_timestamp=to_timestamp): req = Req(body, on_ack=ack, app=app, hostname=hostname, eventer=eventer, task=task, connection_errors=connection_errors, delivery_info=message.delivery_info) if req.revoked(): return if _does_info: info('Got task from broker: %s', req) if events: send_event( 'task-received', uuid=req.id, name=req.name, args=safe_repr(req.args), kwargs=safe_repr(req.kwargs), retries=req.request_dict.get('retries', 0), eta=req.eta and req.eta.isoformat(), expires=req.expires and req.expires.isoformat(), ) if req.eta: try: if req.utc: eta = to_timestamp(to_system_tz(req.eta)) else: eta = to_timestamp(req.eta, timezone.local) except OverflowError as exc: error("Couldn't convert eta %s to timestamp: %r. Task: %r", req.eta, exc, req.info(safe=True), exc_info=True) req.acknowledge() else: consumer.qos.increment_eventually() timer_apply_at( eta, apply_eta_task, (req, ), priority=6, ) else: if rate_limits_enabled: if bucket: return limit_task(req, bucket, 1) task_reserved(req) handle(req)
def on_task(self, task, task_reserved=task_reserved, to_system_tz=timezone.to_system): """Handle received task. If the task has an `eta` we enter it into the ETA schedule, otherwise we move it the ready queue for immediate processing. """ if task.revoked(): return if self._does_info: info('Got task from broker: %s', task) if self.event_dispatcher.enabled: self.event_dispatcher.send('task-received', uuid=task.id, name=task.name, args=safe_repr(task.args), kwargs=safe_repr(task.kwargs), retries=task.request_dict.get( 'retries', 0), eta=task.eta and task.eta.isoformat(), expires=task.expires and task.expires.isoformat()) if task.eta: try: if task.utc: eta = to_timestamp(to_system_tz(task.eta)) else: eta = to_timestamp(task.eta, timezone.local) except OverflowError as exc: error("Couldn't convert eta %s to timestamp: %r. Task: %r", task.eta, exc, task.info(safe=True), exc_info=True) task.acknowledge() else: self.qos.increment_eventually() self.timer.apply_at( eta, self.apply_eta_task, (task, ), priority=6, ) else: task_reserved(task) self._quick_put(task)
def on_task(self, task, task_reserved=task_reserved): """Handle received task. If the task has an `eta` we enter it into the ETA schedule, otherwise we move it the ready queue for immediate processing. """ if task.revoked(): return if self._does_info: info('Got task from broker: %s', task) if self.event_dispatcher.enabled: self.event_dispatcher.send('task-received', uuid=task.id, name=task.name, args=safe_repr(task.args), kwargs=safe_repr(task.kwargs), retries=task.request_dict.get('retries', 0), eta=task.eta and task.eta.isoformat(), expires=task.expires and task.expires.isoformat()) if task.eta: try: eta = timer2.to_timestamp(task.eta) except OverflowError as exc: error("Couldn't convert eta %s to timestamp: %r. Task: %r", task.eta, exc, task.info(safe=True), exc_info=True) task.acknowledge() else: self.qos.increment_eventually() self.timer.apply_at(eta, self.apply_eta_task, (task, ), priority=6) else: task_reserved(task) self._quick_put(task)
def enter(self, entry, eta=None, priority=0): try: timer2.to_timestamp(eta) except OverflowError: if not self.handle_error(sys.exc_info()): raise now = time() if eta is None: eta = now secs = eta - now g = self._spawn_after_local(secs, entry) self._queue.add(g) g.link(self._entry_exit, entry) g.entry = entry g.eta = eta g.priority = priority g.cancelled = False return g
def test_to_timestamp(self): self.assertIs(timer2.to_timestamp(3.13), 3.13)