コード例 #1
0
    def test_defer_task(self):
        expected_uuid = "00000000-0000-0000-0000-000000000000"

        request = self.factory.get("/foo")
        request.user = AnonymousUser()

        @shared_task
        def test_task(value):  # pragma: no cover
            pass

        from celery.signals import before_task_publish, after_task_publish

        before_task_publish.connect(receivers.receiver_before_task_publish)
        after_task_publish.connect(receivers.receiver_after_task_publish)
        try:
            with structlog.threadlocal.tmp_bind(self.logger):
                self.logger.bind(request_id=expected_uuid)
                with self.assertLogs(
                    logging.getLogger("django_structlog.celery.receivers"), logging.INFO
                ) as log_results:
                    test_task.delay("foo")
        finally:
            before_task_publish.disconnect(receivers.receiver_before_task_publish)
            after_task_publish.disconnect(receivers.receiver_after_task_publish)

        self.assertEqual(1, len(log_results.records))
        record = log_results.records[0]
        self.assertEqual("task_enqueued", record.msg["event"])
        self.assertEqual("INFO", record.levelname)
        self.assertIn("child_task_id", record.msg)
        self.assertEqual(expected_uuid, record.msg["request_id"])
コード例 #2
0
    def run_worker(**kwargs):
        after_task_publish.disconnect(run_worker)
        worker = celery.Worker(concurrency=1,
                               pool_cls='solo',
                               use_eventloop=False,
                               prefetch_multiplier=1,
                               quiet=True,
                               without_heartbeat=True)

        @task_postrun.connect
        def stop_worker_soon(**kwargs):
            task_postrun.disconnect(stop_worker_soon)
            if hasattr(worker.consumer, '_pending_operations'):
                # Celery 4.x

                def stop_worker():
                    # avoiding AttributeError that makes tests noisy
                    worker.consumer.connection.drain_events = mock.Mock()

                    worker.stop()

                # worker must be stopped not earlier than
                # data exchange with RabbitMQ is completed
                worker.consumer._pending_operations.insert(0, stop_worker)
            else:
                # Celery 3.x
                worker.stop()

        worker.start()
コード例 #3
0
ファイル: tracing.py プロジェクト: owais/python-celery
 def disconnect_traced_handlers(self):
     if self._propagate:
         before_task_publish.disconnect(self._prepublish)
         after_task_publish.disconnect(self._postpublish)
     task_prerun.disconnect(self._start_span)
     task_failure.disconnect(self._tag_error)
     task_retry.disconnect(self._tag_retry)
     task_postrun.disconnect(self._finish_span)
     log.debug('Disconnected CeleryTracing signal handlers.')