首页 > 解决方案 > 将数据生产者作为工作人员集成到 Django Channels 2.x

问题描述

我正在开发一个应用程序,其中将推送给客户端的实时数据将来自外部 API。它的一个简单版本可以被认为是一个外汇货币跟踪器。用户将指定她想要跟踪的货币(美元、欧元、英镑等)并接收实时更新。货币数据将通过长轮询来自外部 API。我的问题是如何将此数据生产者集成到渠道中?

在所有频道示例中,我发现工人的工作是由事件触发的,但在我的情况下,它将从一开始就开始,持续工作,而不是接收事件,它只会将新值推送到频道层,以便通知订阅者。所以我不确定消费者模式是否正确。总结我的问题:

数据生产者的另一个选择可以将其完全保留在 Django 通道之外,如此处所述只是将数据推送到通道层,但我不确定在部署过程中可能会出现 daphne 的问题。我的意思是如何确保它保持正常运行并与渠道很好地共享资源?

谢谢。

标签: djangodjango-channels

解决方案


工人适合您的用例。它们意味着长期运行,并且每个请求都没有新实例。如果你想让你的消费者异步,你必须确保你所做的任何事情都不会阻塞。所有 db 查询都必须包含在 database_sync_to_async 中,即使 db 调用发生在调用堆栈的 5 个级别。您可以使用 Django 缓存 API 连接到 Redis,但最好在它之外工作以保持一切异步。直接使用 redis 库通道使用,因为它具有将 redis 用作缓存的异步方法。


推荐阅读