Я пытаюсь синхронизировать два потока в скрипте Python для работы. Идея заключается в том, чтобы первым потоком был TCP-сервер, который получал бы данные от клиента, сохранял данные в переменной, и эта же переменная должна быть передана второму потоку сценария 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: у объекта «Поток» нет атрибута «Тире»