Seite 1 von 1

Threading

Verfasst: Donnerstag 24. Januar 2019, 12:10
von tschaka81
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

Code: Alles auswählen

onCalculationfinished.set()
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:

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')

Re: Threading

Verfasst: Donnerstag 24. Januar 2019, 13:04
von Sirius3
Was machst Du denn da mit exec??? Funktionen sind wie andere Objekte auch einfache Objekte, die man als Parameter benutzen kann. Da muß man nicht formatierte Strings ausführen. Schreib das mal ohne Exec und benutze eine Queue, der kannst Du Information mitgeben.

Re: Threading

Verfasst: Donnerstag 24. Januar 2019, 13:16
von tschaka81
Hi, das mit dem Exec war jetzt auch ein Schnellschuss :=)

Ich werde mir das mal mit den Queue anschauen.

Danke erstmal