Синхронизация потоков (мьютексы) в Python
Опубликовано vladimir в Пт, 09/05/2008 - 00:10
Несмотря на 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()

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