Django-channels可以与芹菜共存吗

Could Django-channels co-exists with celery

如果我用 Django-channels(nginx + channels,我喜欢它的 websocket 能力)组成一个网站,我还能像其他普通的 django 一样在后台添加一些 celery app/tasks 运行项目?

答案是。 Celery 是一个不同的独立进程。您可以使用 django-channels 和芹菜,就像将芹菜与 Django 一起使用一样。

是的,您可以同时使用两者。

例如https://vincenttide.com/blog/1/django-channels-and-celery-example/

  • 在浏览器端

您创建websocket,服务器发送实时消息。

https://github.com/VincentTide/django-channels-celery-example/blob/6ddc5ace0e1b99031ad0505ba0ec20be3f87704d/templates/jobs/index.html#L73

  • 消费者端

您收到请求,创建任务(并告诉哪个频道回复)。

@channel_session
def ws_receive(message):
    job.delay(message.reply_channel.name)
  • 在芹菜工人中

你接到任务,运行它。并通过daphne向浏览器发送实时消息。

@app.task
def job(reply_channel):
    Channel(reply_channel).send({
        "text": json.dumps ({
            "action": "completed",
        })
    })