Приветствую!
У меня есть два потока.
Thread1 в бесконечном цикле производит расчёты.
Thread2 обращается к медленной БД.
Для передачи данных между ними есть объект SharedObject.
Я раньше думал, что при обращении (чтению/записи атрибута, вызове метода) одного потока к
SharedObject, для другого потока происходит блокировка любых обращений к
SharedObject автоматически (GIL).
Сейчас я стал в этом сомневаться.
- - -
Вопросы:
1) Как обустроить обращение к общему объекту из разных потоков?
Я так понял, что в идеале нужно добавить Lock, но я не могу понять как работает конструкция with Lock?
from threading import Lock
shared_object_lock = Lock()
with shared_object_lock:
self.shared_object.do_something()
2) Правильно ли в целом я делаю многопоточность в коде ниже (обработку прерывания для остановки опустил)?
class Thread1(Thread):
def __init__(self, shared_object):
Thread.__init__(self)
self.shared_object = shared_object
def run(self):
while True:
# что должно быть здесь?
self.shared_object.do_something()
class Thread2(Thread):
def __init__(self, shared_object):
Thread.__init__(self)
self.shared_object = shared_object
def run(self):
while True:
# что должно быть здесь?
self.shared_object.do_something_another()
class MainObj:
def __init__(self):
self.shared_object = SharedObject()
self.thread_1 = Thread1(shared_object=self.shared_object)
self.thread_2 = Thread2(shared_object=self.shared_object)
def run(self):
self.thread_1.start()
self.thread_1.start()
- - -
Спасибо!