`lambda` ist nicht nötig, weil Thread dafür passende Argumente hat:
Code: Alles auswählen
threading.Thread(target=control.control, args=('get', ))
Code: Alles auswählen
threading.Thread(target=control.control, args=('get', ))
Ja aber client benötige ich doch für die Steurrung von der Hardware.Sirius3 hat geschrieben: ↑Montag 21. November 2022, 13:36 Da Du in Temperature_Control.__init__ nicht Echo.__init__ aufrufst, ist die Echo-Funktionalität kaputt. Also braucht Temperature_Control client, server, sock und address, was es aber nicht haben kann, weil ja Temperatur_Control nicht mit einem Client verknüpft ist. Daher ist die Vererbung vollkommen verquer.
`lambda` ist nicht nötig, weil Thread dafür passende Argumente hat:Du mußt ganz klar die Kommunikation mit den Web-Clients von der Hardwareansteuerung trennen. Im Moment sieht das sehr verschränkt aus.Code: Alles auswählen
threading.Thread(target=control.control, args=('get', ))
Code: Alles auswählen
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "websocketserver6_threading.py", line 516, in control
rp = self.modbus.read_coils(524, 0x1)
AttributeError: 'str' object has no attribute 'modbus'
Code: Alles auswählen
class Temperature_Control2():
def __init__(self, value):
if value is None:
value = {}
self.value = value
def control(self, value):
while True:
for thread in threading.enumerate():
print(thread.name)
rp = self.modbus.read_coils(524, 0x1)
print(rp.bits[0])
time.sleep(1)
def main():
logging.basicConfig()
with ModbusClient(host=HOST, port=PORT) as client:
client.connect()
time.sleep(0.01)
print("Websocket server on port %s" % PORTNUM)
server = SimpleWebSocketServer('', PORTNUM, partial(Echo, client))
control = Temperature_Control2
t2 = threading.Thread(target=control.control, args=('get', ''))
t2.start()
try:
server.serveforever()
finally:
server.close()
if __name__ == "__main__":
main()
Soulpilot hat geschrieben: ↑Montag 21. November 2022, 14:14Also gut, so scheint es zu laufen, ohne Vererbung und mit client, damit modbus funtkioniert. Was denkt Ihr?Sirius3 hat geschrieben: ↑Montag 21. November 2022, 13:36 Da Du in Temperature_Control.__init__ nicht Echo.__init__ aufrufst, ist die Echo-Funktionalität kaputt. Also braucht Temperature_Control client, server, sock und address, was es aber nicht haben kann, weil ja Temperatur_Control nicht mit einem Client verknüpft ist. Daher ist die Vererbung vollkommen verquer.
`lambda` ist nicht nötig, weil Thread dafür passende Argumente hat:Code: Alles auswählen
threading.Thread(target=control.control, args=('get', ))
Code: Alles auswählen
class Temperature_Control2(): def __init__(self, client): self.modbus = client def control(self, value): while True: print("temp_control_class") for thread in threading.enumerate(): print(thread.name) rp = self.modbus.read_coils(525, 0x1) print(rp.bits[0]) time.sleep(2) def main(): logging.basicConfig() with ModbusClient(host=HOST, port=PORT) as client: client.connect() time.sleep(0.01) print("Websocket server on port %s" % PORTNUM) server = SimpleWebSocketServer('', PORTNUM, partial(Echo, client)) control = Temperature_Control2(client) t2 = threading.Thread(target=control.control, args=('get', )) t2.start() try: server.serveforever() finally: server.close() if __name__ == "__main__": main()
Danke, ich möchte ja das Programm noch weiter entwickeln, und value soll dann später tatsächlich übergeben werden, für den schnellen Test habe ich die Variable manuell reingeschrieben.__deets__ hat geschrieben: ↑Montag 21. November 2022, 15:19 Auch wenn die eine Klasse jetzt schon ein bisschen besser ist - wozu ist denn value? Das wird nicht benutzt, und als dauerhafte Kontroll-Variable hat es keinen Sinn, denn du uebergibst das ja nur einmal zu Beginn. Warum fuehrst du sowas ein?
Verstanden, werde ich machen. Vielen Dank für Deine bzw. Eure Hilfe!__deets__ hat geschrieben: ↑Montag 21. November 2022, 15:30 YAGNI. Du hast ueberhaupt keine Ahnung, was du wann wie wo brauchst. Und ob das, was du dir vorher ausgedacht hast, auf deine Anforderung passt. Lass sowas einfach weg. Es macht dein Leben jetzt mehr kompliziert, und muss einfach nur spaeter aufgeraeumt werden.