Wie man ZeroMQ in Streamlit verwendet

ZMQ in Streamlit zu verwenden ist nicht trivial, da die gesamte Datei viele Male ausgeführt wird. Sie müssen also darauf achten, dass Context, Socket etc nur einmal erstellt werden.

Der Trick ist, @st.cache_resource zu verwenden, um den Context und den Socket zu cachen. Hier ist ein Beispiel:

streamlit_zmq_example.py
#!/usr/bin/env python3
import zmq
import json
import streamlit as st

# Set up ZMQ PUB socket
@st.cache_resource
def init_zmq():
    print("Initializing ZMQ")
    context = zmq.Context()
    socket = context.socket(zmq.PUB)
    socket.bind("tcp://*:15629")
    return context, socket
# Create context and socket, or use cached one
context,socket = init_zmq()

st.title('My streamlit ZMQ test')

# Create button
my_button = st.toggle('My button')

# Save button
if st.button('Save'):
    st.write('Button clicked!')
    message = json.dumps({
        'my_button': all_motors_on,
    })
    print(f"Sending message: {message}")
    socket.send_string(message)

Check out similar posts by category: ZeroMQ, Python