Синхронизация потоков (мьютексы) в Python

 

Несмотря на GIL, Python не является полностью thread-safe. Поэтому в критических секциях (особенно в тех местах, где вызывается сишный код или сторонние бинарники) нужно использовать мьютексы (mutex), которые в Python представлены в виде объекта threading.Lock

Вот пример использования:

import threading
 
class MyClass:
    def __init__(self):
         self.lock = threading.Lock()
 
    def critical_function(self):
        self.lock.acquire() # заполучить лок
        do_something_important() # этот код гарантированно не будет прерван каким либо другим потоком
        self.lock.release() # освободить лок
 
class MyThread(threading.Thread):
    def run(self):
        self.myclass = MyClass()
        while 1:
            do_something()
            self.myclass.critical_function()
 
thread1 = MyThread()
thread2 = MyThread()
 
thread1.start()
thread2.start()

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
КАПЧА