settings.py 文件中的 Celery 配置
Celery configuration in settings.py file
谁能解释一下 Django 中 celery RabbitMQ 中的这些行。什么时候使用?
我在 celery RabbitMq 中 运行 2 个任务(django 中的加法操作和端点)没有成功地完成这些行。所以请解释一下什么时候会在settings.py和celery rabbitmq
中使用
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
__init__.py :
from .celery import app as celery_app
__all__ = ('celery_app',)
提前致谢
即使没有这些显式设置,您的任务仍然 运行ning 的原因是因为 Celery 在其文档中为它们提供了默认值。
为了形象化,这是一个 运行,我们不会设置 broker_url
。
$ cat > tasks.py
from celery import Celery
app = Celery('my_app')
$ celery --app=tasks worker --loglevel=INFO
...
- ** ---------- [config]
- ** ---------- .> app: my_app:0x7f5a09295160
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 5 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
...
- 如您所见,即使我们没有显式设置代理,它也默认为
transport: amqp://guest:**@localhost:5672//
,这是 docs: 中所述的 RabbitMQ 的默认值
broker_url
Default: "amqp://"
The transport part is the broker implementation to use, and the
default is amqp, (uses librabbitmq if installed or falls back to
pyamqp).
这是一个 运行,我们将在其中明确设置 broker_url
。要查看差异,假设我们的 RabbitMQ 代理使用不同的密码侦听本地主机 127.0.0.1 的端口 666。
$ cat > tasks.py
from celery import Celery
app = Celery('my_app')
app.conf.broker_url = "amqp://guest:a-more-secure-password@127.0.0.1:666"
$ celery --app=tasks worker --loglevel=INFO
...
- ** ---------- [config]
- ** ---------- .> app: my_app:0x7fb02579f160
- ** ---------- .> transport: amqp://guest:**@127.0.0.1:666//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 5 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
...
- 现在,代理已设置为我们配置的值
transport: amqp://guest:**@127.0.0.1:666//
如果值与默认值不同,您需要更改这些设置。有关每个可配置设置的更多详细信息,请参阅 docs.
- 覆盖默认值的一个特殊用例如上面
broker_url
的示例所示,我们需要明确设置它以使用 [=17= 中的 RabbitMQ 运行ning ] 而不是假定的默认值 amqp://guest:guest@127.0.0.1:5672
如果我们不设置它会导致错误 consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 104] Connection reset by peer. Trying again in 2.00 seconds... (1/100)
。
其他参考资料:
谁能解释一下 Django 中 celery RabbitMQ 中的这些行。什么时候使用? 我在 celery RabbitMq 中 运行 2 个任务(django 中的加法操作和端点)没有成功地完成这些行。所以请解释一下什么时候会在settings.py和celery rabbitmq
中使用CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
__init__.py :
from .celery import app as celery_app
__all__ = ('celery_app',)
提前致谢
即使没有这些显式设置,您的任务仍然 运行ning 的原因是因为 Celery 在其文档中为它们提供了默认值。
为了形象化,这是一个 运行,我们不会设置 broker_url
。
$ cat > tasks.py
from celery import Celery
app = Celery('my_app')
$ celery --app=tasks worker --loglevel=INFO
...
- ** ---------- [config]
- ** ---------- .> app: my_app:0x7f5a09295160
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 5 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
...
- 如您所见,即使我们没有显式设置代理,它也默认为
transport: amqp://guest:**@localhost:5672//
,这是 docs: 中所述的 RabbitMQ 的默认值
broker_url
Default: "amqp://"
The transport part is the broker implementation to use, and the default is amqp, (uses librabbitmq if installed or falls back to pyamqp).
这是一个 运行,我们将在其中明确设置 broker_url
。要查看差异,假设我们的 RabbitMQ 代理使用不同的密码侦听本地主机 127.0.0.1 的端口 666。
$ cat > tasks.py
from celery import Celery
app = Celery('my_app')
app.conf.broker_url = "amqp://guest:a-more-secure-password@127.0.0.1:666"
$ celery --app=tasks worker --loglevel=INFO
...
- ** ---------- [config]
- ** ---------- .> app: my_app:0x7fb02579f160
- ** ---------- .> transport: amqp://guest:**@127.0.0.1:666//
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 5 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
...
- 现在,代理已设置为我们配置的值
transport: amqp://guest:**@127.0.0.1:666//
如果值与默认值不同,您需要更改这些设置。有关每个可配置设置的更多详细信息,请参阅 docs.
- 覆盖默认值的一个特殊用例如上面
broker_url
的示例所示,我们需要明确设置它以使用 [=17= 中的 RabbitMQ 运行ning ] 而不是假定的默认值amqp://guest:guest@127.0.0.1:5672
如果我们不设置它会导致错误consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 104] Connection reset by peer. Trying again in 2.00 seconds... (1/100)
。
其他参考资料: