mehrere Objekte oder "intelligentes" Objekt
Verfasst: Samstag 12. Juli 2014, 12:34
Hey Leute ich steh wie üblich vor einer Aufgabe, bei der ich nicht weiter komme. Hier erst mal der Code, Erklärung folgt darunter.
Jetzt die Frage: Mit dem Counter Objekt will ich, sobald einmal gestartet, markieren ob ein Zähler gestartet wurde oder nicht. Dazu in einer separaten Funtion ständig die config datei überprüfen und somit den Objektstatus überprüfen, sprich sobald sich der Objekt status ändert von 1 zu 0 also active zu inactive, den Zähler beenden, also die jeweilige Funtion schließen. Dies wird dann denke ich gut über Threads machbar sein, dass ich sie aktivieren und deaktivieren kann. Nur wie mache ich das mit dem Counter Objekt? Muss ich jetzt 8 Counter Objekte erstellen oder kann ich irgendwie mit einem Objekt alle 8 Stati loggen?
Zum Nachvollziehen, hier noch die Konfigurationsdatei:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import read_ec as ec #Meine zwei Unterskripte werden als Module geladen.
import read_s0 as s0
from time import sleep
from threading import Lock
from threading import Thread
class Counter(object): #Hier wird ein Counter Objekt erstellt, um den Status des Zählers zu loggen, Erklärung später.
def __init__(self,value=0):
self.value = value
self.lock = Lock()
def set_on(self):
with self.lock:
self.value = 1
result = self.value
return result
def set_off(self):
with self.lock:
self.value = 0
result = self.value
return result
def get_status(self):
with self.lock:
result = self.value
return result
def read_config(): #liest meine Konfigurationsdatei, in der Serverdaten, Emaildaten, und die Stati der Zähler enthalten sind
config_content = []
with open("konfiguration.txt") as one_file:
for line in one_file:
config.append(line.rstrip())
return config_content
"""Die Start-Funktion der Zähler. Hier ändert sich nur der Tabellennname
und der letzte Wert der Konfigurationsdatei wird aus einer anderen Zeile gezogen.
"""
def start_s0(config_content, number):
intervall = 900
frequency = 100
digital_input = 0
led_output = 0
table_name = "S0_Zaehler_0" + number
s0.main(
intervall,
frequency,
table_name,
digital_input,
led_output,
config_content[0],
config_content[1],
config_content[2],
config_content[3],
config_content[4],
config_content[5],
config_content[6],
config_content[7],
config_content[8],
config_content[9]
)
"""Jetzt wird der Start-Prozess gefahren. Die config Datei wird gelesen und immer die für den
jeweiligen Zähler interessante Zeile wird überprüft, kann active oder inactive sein.
Ist sie active, wird der Zähler-Prozess gestartet. Ist sie inactive wird der nächste überprüft.
"""
def initiation_process(count):
config_content = read_config()
for x in range(8):
n = 10 + x
number = x + 1
status = count.get_status()
if status = 1:
break
elif config_content[n] = "active":
start_s0_thread(config_content, number)
count.set_on()
else:
continue
def start_s0_thread():
thread = Thread(target=start_s0, args=(config_content, number))
thread.setDaemon(True)
thread.start
def main():
count = Counter()
while True:
initiation_process(count)
sleep(300)
if __name__ == '__main__':
main()
Zum Nachvollziehen, hier noch die Konfigurationsdatei:
Code: Alles auswählen
db_host
db_user
db_password
db_database
em_host
em_fromaddr
em_toaddr
em_port
em_login
em_password
active
inactive
inactive
inactive
inactive
inactive
inactive
inactive