Threading
Verfasst: Donnerstag 24. Januar 2019, 12:10
Hallo an alle,
ich bin derzeit dabei eine Art plugin System in Python zu schreiben. Dafür wollte ich unter anderem Threads benutzen. Derzeit bin ich so weit, dass ich die Threads durch selbstgebaute Events starten kann. Das passt schon einmal. Ich habe nur das Problem, das ich gerne noch eine Information hätte, an welcher Stelle das event aufgetreten ist. Oder anders ausgedrückt: Kann man beim Befehl irgendwie Parameter übergeben, die ich dann in meinen Threads wieder einlesen, also in prog1 bzw prog2 nutzen kann, so wie prog1(e.data(x),e.data(y),e.data(z)) und onCalculationfinished.set().data(x,y,z)?
Derzeit sieht mein "vereinfachter" Code folgendermaßen aus:
ich bin derzeit dabei eine Art plugin System in Python zu schreiben. Dafür wollte ich unter anderem Threads benutzen. Derzeit bin ich so weit, dass ich die Threads durch selbstgebaute Events starten kann. Das passt schon einmal. Ich habe nur das Problem, das ich gerne noch eine Information hätte, an welcher Stelle das event aufgetreten ist. Oder anders ausgedrückt: Kann man beim Befehl
Code: Alles auswählen
onCalculationfinished.set()Derzeit sieht mein "vereinfachter" Code folgendermaßen aus:
Code: Alles auswählen
import threading
import time
import logging
logging.basicConfig(level=logging.DEBUG,
format='(%(threadName)-9s) %(message)s',)
def prog1():
print "test1"
def prog2():
print "test2"
if __name__ == '__main__':
Liste = [["onCalculationfinished", "(prog1, prog2)"]]
for dat in Liste:
exec("""def main_"""+dat[0]+"""(e, functions):
while True:
event_is_set = e.wait()
for func in functions:
func()
e.clear()""")
exec(dat[0]+" = threading.Event()")
exec("t1 = threading.Thread(name='"+dat[0]+"', target=main_"+dat[0]+", args=("+dat[0]+", "+dat[1]+"))")
exec("t1.daemon = True")
exec("t1.start()")
logging.debug('Waiting before calling Event.set()')
time.sleep(1)
onCalculationfinished.set()
time.sleep(1)
logging.debug('Event is set')