[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

Recommended Posts

Lock und Rlock
[Linux] Tauschen Sie CapsLock und Ctrl aus
Über _ und __