Použití ZMQ ve streamlit není triviální, protože celý soubor bude spuštěn mnohokrát. Takže se musíte postarat, aby context, socket atd byly vytvořeny pouze jednou.
Trik je použít @st.cache_resource pro cache contextu a socketu. Zde je příklad:
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)Pokud vám tento článek pomohl, zvažte, zda mi nekoupíte kávu nebo nepřispějete přes PayPal na podporu výzkumu a publikování nových článků na TechOverflow