0

Kennt jemand eine Möglichkeit, eine Sperre zu erwerben, so dass nicht nur die aufgerufene Funktion, sondern auch andere Funktionen gesperrt sind.Python: Cross-Funktion Threading

Lassen Sie uns sagen, ich habe eine Reihe von Funktionen (a(), b(), c()) und wenn ich Funktion a aufrufen() will ich auch Funktionen b() & c() gesperrt werden.

import threading 
from time import sleep 

def a(): 
    for i in range(5): 
     print(i) 
     sleep(1) 

def b(): 
    for i in range(5): 
     print(i) 
     sleep(1) 

def c(): 
    for i in range(5): 
     print(i) 
     sleep(1) 

thread_a=threading.Thread(target=a) 
thread_a.start() 
thread_b=threading.Thread(target=b) 
thread_b.start() 
thread_c=threading.Thread(target=c) 
thread_c.start() 

Wie habe ich das Schloss verwenden, wenn ich den obigen Code die Ausgabe geben will:

0 
1 
2 
3 
4 
0 
1 
2 
3 
4 
0 
1 
2 
3 
4 

?

Jede Hilfe dankbar, Greetz

Antwort

0

Sie müssen in der einen oder anderen verwenden die gleiche Lock Instanz zwischen Ihren Funktionen gemeinsam genutzt.

lock = threading.Lock() 

def a(): 
    with lock: 
     for i in range(5): 
      print(i) 
      sleep(1) 

Tun Sie dies für jede Funktion und es wird ausgegeben, was Sie wollen.

+0

Danke Unatiel, das hat den Trick gemacht !! –