示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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
示例#6
0
    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
示例#7
0
 def test_to_timestamp(self):
     self.assertIs(timer2.to_timestamp(3.13), 3.13)
示例#8
0
 def test_to_timestamp(self):
     self.assertIs(timer2.to_timestamp(3.13), 3.13)