Ankündigung

Einklappen
Keine Ankündigung bisher.

sicherstellen das Logik welche viele Trigger hat nur 1x läuft, keine paral. Instanzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    sicherstellen das Logik welche viele Trigger hat nur 1x läuft, keine paral. Instanzen

    Problem:

    wenn 2x gleichzeitig xy1.Power & xy2.Power getriggert werden, läuft 2x Realy.py in Endlosschleife ...

    logic.conf
    Code:
    [Relais]
        filename   = Relais.py
        watch_item = *.Power # 10 verschiedene
    mein bisheriger Ansatz: file erzeugen, Logik laufen lassen, file löschen, sollte 2. parallele Instance eigentlich ausschließen, aber fkt. nicht 100 % ig

    relay.py
    Code:
    import random
    runlock = "/run/relay.run"
    wartezeit= random.randint(2,8)
    while (os.path.isfile(runlock)):
       logger.info("runlock exist, wait {0} sec".format(wartezeit) )
       time.sleep(wartezeit)
    os.mknod(runlock)
    logger.info("runlock do not exist ! start procedure")
    
    # eigentliche Logik
    
    os.remove(runlock)
    ist leider nicht immer erfolgreich !!!

    wer kennt eine bessere/sicherere Lösung ?

    #2
    Hast Du schon mal https://docs.python.org/3/library/th...l#lock-objects angeschaut?
    So könnte es gehen, teste mal:
    Code:
    from threading import Lock
    lock = Lock()
    
    with lock:
         #hier der thread lock code

    Kommentar


      #3
      oder so:
      Code:
      from threading import Lock
      lock = Lock()
      
      lock.acquire()
      try:
          # hier der thread lock code
      finally:
          lock.release()

      Kommentar


        #4
        Sowas macht man eigentlich mit einem semaphoren Objekt. Aber wo wird diese Objekt gespeichert. Gleiches gilt für das Lock Beispiel von cmalo.
        vg
        Jürgen

        Kommentar


          #5
          Danke bis jetzt klapts

          Kommentar

          Lädt...
          X