folgendes Problem bzw. Situation, ich möchte mit einem Steuerungs-Skript einige Aufgaben erledigen. Im Folgenden die Aufgaben:
1. Das Skript startet und geht davon aus, dass noch kein Zähler läuft (das ist gewollt so), also haben wir eine Liste, in der die Stati der Zähler enthalten sind, 8 Zähler gesamt.
2. Der Initiations-Prozess beginnt, bedeutet, dass als erstes eine Konfigurationsdatei gelesen wird, in der drin steht, ob ein Zähler aktiviert wurde oder nicht.
3. Erste Abfrage besteht daraus, zu überprüfen ob Zähler x schon aktivert wurde, ist dies der Fall (kann beim ersten Start nicht sein), wird der aktuelle For-Schleifen Durchlauf übersprungen.
4. Als nächstes wird überprüft, ob der Zähler x aktiviert wurde. Ist dies der Fall, soll ein Thread mit dem entsprechenden Skript starten ( dazu später mehr). Und anschließend der Status des Zählers x auf "1" also ON gestellt werden.
5. Als nächste Abfrage wird überprüft, ob der Zähler deaktiviert wurde, aber der Thread noch läuft. Ist dies der Fall, soll der Thread gestoppt werden und der Status wieder auf "0" OFF gestellt werden.
6. Falls nichts der Fall sein sollte, wird der nächste Zähler überprüft.
7. Am ende soll die Status-Liste der Zähler übergeben werden, also im nächsten Durchlauf den gleichen Inhalt haben, dabei bin ich mir nicht sicher, ob ich das so richtig gemacht habe.
Zum Thema Threads ... keine Ahnung ob das so richtig ist wie ich den Thread zu stoppen versuche, ich gehe mal davon aus, dass es nicht stimmt. Bin aber irgendwie net so ganz schlau aus der Doku geworden, da bräuchte ich noch etwas Hilfe.
Neben den Thread Themen eine allgemeine Frage an alle, ob das sonst passt, also die Vorgehensweise, oder ob man was ganz anders gestalten sollte? Danke für Feedback!
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import read_ec as ec
import read_s0 as s0
import config_datei as cod
from time import sleep
from threading import Lock
from threading import Thread
def read_config_status():
if is_changed(config_datei):
config_datei = reload(config_datei)
return cod.config["counterStates"]
def start_s0(x):
number = x + 1
intervall = 900
frequency = 100
digital_input = x
led_output = x
table_name = "S0_Zaehler_0" + number
s0.main(intervall, frequency, table_name, digital_input, led_output)
def set_on(counter_status, x):
counter_status[x] = 1
return counter_status
def set_off(counter_status, x):
counter_status[x] = 0
return counter_status
def initiation_process(counter_status):
config_status = read_config_status()
for x in range(8):
if counter_status[x] = 1:
break
elif config_status[x] = "active":
start_s0_thread(x)
set_on(counter_status, x)
break
elif config_status[x] = "inactive" and counter_status[x] = 1:
stop_s0_thread(x) #der jeweilige thread soll beendet werden
set_off(counter_status, x)
break
else:
continue
return counter_status #soll die Liste mit den Stati weiterschleifen
def start_s0_thread(x):
thread = Thread(target=start_s0, name=x args=(number))
thread.setDaemon(True)
thread.start
def stop_s0_thread(x): #keine Ahnung ob das so richtig ist ...
thread = Thread(name=x) #soll den Thread mit dem namen x stoppen ... ?!
thread.stop
def main():
counter_status = [
"0",
"0",
"0",
"0",
"0",
"0",
"0",
"0",
]
while True:
initiation_process(counter_status)
sleep(60)
if __name__ == '__main__':
main()