django - 在 Celery Signal 调用后发送事件
问题描述
我有一个 Django 项目并调用一个名为的任务my_task
并收听该任务发送的不同信号。我在我的项目中使用 django_eventstream 发送到我的事件流。
from django_eventstream import send_event
after_task_publish
当我通过以下方式收听 celery 内置信号时
@after_task_publish.connect(sender='my_task')
def task_sent_handler(sender=None, headers=None, body=None, **kwargs):
print("task_sent")
message = "task_sent"
send_event("eventchannel", "my_event", message)
消息被发送到我现有的事件流,并且按预期工作。print 语句被打印到 webserver 控制台
task_success
但是当我通过以下方式收听 celery 内置信号时
@task_success.connect(sender=my_task)
def task_success_handler(sender=None, result=None, **kwargs):
print("task_success")
message = "task_success"
send_event("eventchannel", "my_event", message)
send_event 不会发送到我的事件流。print 语句将打印到 celery 工作控制台。我正在努力寻找这种行为的原因。两个信号之间有什么区别,或者由信号触发的两个功能之间有什么区别?
使用以下版本:
Django=3.2.6
celery=5.1.2
redis=3.5.3
django-eventstream=4.2.0
更新:
当我在task_success_handler()
执行后重新启动开发服务器时,现有的 EventSource 被关闭并创建了一个新的 EventSource,然后发送的消息send_event()
到达客户端的 Eventstream。
解决方案
推荐阅读
- c++ - 将int值附加到字符串?
- swift - 为什么打印我的对象的一个实例,使其陷入无限循环,并因错误 EXC_BAD_ACCESS 而崩溃?
- node.js - Firebase-admin 处理多种环境
- javascript - 如何计算来自选择下拉字段的值?
- azure-service-fabric - Azure 服务结构 - 实例 VS 副本
- mongodb - MongoDB 在事先不知道所有字段的情况下聚合字段
- java - Freemarker:访问模板中没有getter的公共字段
- c++ - 双嵌套for循环中的访问冲突写入位置
- node.js - 完整的复杂 json 对象 $http.post 到 node.js 失败
- java - 如何解决:第一次调用 OnCreate() 时,我无法从 Retrofit Concrete Class 中检索数据