【发布时间】:2014-10-10 02:48:47
【问题描述】:
我正在使用 Flask-SocketIO 创建一个实时通知系统。有一个外部 API 服务器通过 RPC 在单独的线程中调用 socketio 服务器。 RPC 调用的方法会创建一个 Celery 任务,当使用该任务时,会调用一个调用 socketio.emit() 的方法。但是,该消息似乎并未实际发送,因为在 javascript 客户端中未收到任何消息。我的直觉告诉我,当 Celery 工作进程在单独的进程中运行时,被调用的 socketio.emit() 方法不会发送到连接的客户端,尽管对象存在于内存中的同一位置。服务器正在运行 gevent,Celery 正在接收并完成日志中看到的任务。此外,我已验证 socketio.emit() 正在由 Celery 工作人员调用,并且我已验证当直接调用任务时,绕过 Celery,socketio 按预期工作。当 celery 任务在一个单独的进程中引用它时,如何让 socketio 正确通信有什么想法吗?
【问题讨论】:
-
你可能没有将应用内容推送给 celery worker
标签: python flask socket.io celery gevent