我正在尝试同步python脚本中的两个线程来工作。这个想法是第一个成为TCP Server的线程,它将从客户端接收数据,将数据保存在变量中,并且应将相同的变量赋予DASH脚本第二个线程,该脚本将创建图形。通过使用线程,我想使当TCP服务器中接收到新数据时,图可以自我更新。列表被更新。
代码:
app = dash.Dash()
def dash():
app.layout = html.Div([
html.H1('Hardware Praktikum'),
dcc.Dropdown(
id='my-dropdown',
options=[
{'label': 'Tesla', 'value': 'TSLA'},
{'label': 'Apple', 'value': 'AAPL'}
],
value='TSLA'
),
dcc.Graph(id='my-graph', animate=True),
dcc.Interval(
id='interval-component',
interval=1*1000, # in milliseconds
n_intervals=0
)
])
@app.callback(Output('my-graph', 'figure'), [Input('my-dropdown', 'value')])
def update_graph(selected_dropdown_value):
return {
'data': list }
if __name__ == '__main__':
app.run_server()
def server():
HOST = '******' # Server IP or Hostname
PORT = 22000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#managing error exception
s.bind((HOST, PORT))
#except socket.error:
# print socket.error
#print 'Bind failed '
s.listen(5)
print 'Socket awaiting messages'
(conn, addr) = s.accept()
print 'Connected'
#List to save data
list = []
# awaiting for message
while True:
data = conn.recv(1024)
print 'Received data: ' + data
reply = ''
# process your message
#break if no data
if not data:
break
elif ("close"):
break
else:
#append new data
data=data.split(",")
list.append((float(data[0]),float(data[1])))
reply = 'Saved'
# Sending reply
conn.send(reply)
conn.close() # Close connections
dash = threading.Thread(target=dash)
server = threading.Thread(target=server)
server.start()
dash.start()
从我的角度来看,它背后的逻辑应该可以完成这项工作。显然我错了。我得到
AtributeError:“线程”对象没有属性“破折号”