微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Streamlit 应用程序通过 ZMQ 发送消息

如何解决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 举报,一经查实,本站将立刻删除。