如何解决Python Streamlit 应用程序通过 ZMQ 发送消息
对 Streamlit 来说很新,但我正在尝试创建一个仪表板,该仪表板能够通过 ZMQ 将消息发送到充当订阅者的服务器应用程序。
import streamlit as st
import pandas as pd
import numpy as np
import altair as alt
import time
import zmq
class StreamLitManager(object):
def __init__(self,log_file_path,zmq_port="88888"):
self.log_file_path = log_file_path
self.port = zmq_port
self.context = None
self.socket = None
def InitConnections(self):
self.context = zmq.Context()
self.socket = self.context.socket(zmq.PUB)
self.socket.bind("tcp://*:" + str(self.port))
# Send Message
# Close it right after using,this doesn't work as it doesn't close/terminate
# I tried self.context.close() too,same situation
self.context.term()
if __name__ == "__main__":
submitted1 = st.form_submit_button('Submit 1')
if submitted1:
sm = StrategyManager(user_input)
sm.InitConnections()
所以这个想法是每当用户按下提交 1 按钮时,我想发送一条消息。我遇到的问题是 ZMQError: Address in use
。根据我对 streamlit 的肤浅理解,每当某些参数发生变化时,整个代码都会重新运行。当我不断为每个用户点击提交创建一个新的 ZMQ 发布者连接时,这似乎不太好。是我做错了什么还是有更好的设计模式我应该做。
谢谢
解决方法
PUB/SUB 在这里不是一个好的模式,它不断启动和停止,因为您可能会丢失消息。详情请见此处(py)zmq/PUB : Is it possible to call connect() then send() immediately and do not lose the message?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。