[PYTHON] Lock und Rlock
import logging
import threading
import time
logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s')
def worker1(d, lock):
logging.debug('start')
#Es werden keine anderen Threads verarbeitet, bis die Verarbeitung innerhalb des With-Lock-Blocks abgeschlossen ist.
with lock:
i = d['x']
time.sleep(5)
d['x'] = i + 1
logging.debug(d)
#Schloss mit Hauptfunktion= threading.Lock()Wenn Sie dies tun, wird der Vorgang nicht fortgesetzt
with lock:
d['x'] = i + 1
logging.debug('end')
def worker2(d, lock):
logging.debug('start')
#lock.acuire()Und sperren.Andere Threads werden erst verarbeitet, wenn der von der Freigabe umgebene Teil verarbeitet ist
lock.acquire()
i = d['x']
d['x'] = i + 1
logging.debug(d)
lock.release()
logging.debug('end')
if __name__ == '__main__':
d = {'x': 0}
lock = threading.RLock()
t1 = threading.Thread(target=worker1, args=(d, lock))
t2 = threading.Thread(target=worker2, args=(d, lock))
t1.start()
t2.start()
Ausgabe
Thread-1: start
Thread-2: start
Thread-1: {'x': 1}
Thread-1: end
Thread-2: {'x': 2}
Thread-2: end