Back to questions
СБЕР клауд
Junior — Middle
48
Каким образом осуществляется обмен данными и синхронизация между различными потоками выполнения?
Companies where asked
Answer from AI
sobes.tech AI
В Python обмен данными между потоками обычно осуществляется через общие объекты, например, очереди (queue.Queue), списки или словари, при этом для предотвращения состояния гонки используется синхронизация.
Для синхронизации применяются механизмы из модуля threading:
- Lock (блокировка) — обеспечивает эксклюзивный доступ к ресурсу.
- RLock (рекурсивный Lock) — позволяет одному потоку несколько раз захватывать блокировку.
- Event — для уведомления потоков о наступлении события.
- Condition — для более сложной синхронизации с ожиданием условий.
Пример использования очереди и блокировки:
import threading
import queue
q = queue.Queue()
# Поток-производитель
def producer():
for i in range(5):
q.put(i)
print(f'Произведено: {i}')
# Поток-потребитель
def consumer():
while True:
item = q.get()
if item is None:
break
print(f'Потреблено: {item}')
q.task_done()
producer_thread = threading.Thread(target=producer)
consumer_thread = threading.Thread(target=consumer)
producer_thread.start()
consumer_thread.start()
producer_thread.join()
q.put(None) # сигнал для завершения потребителя
consumer_thread.join()
Таким образом, обмен данными происходит через потокобезопасные структуры (например, queue.Queue), а синхронизация — через блокировки и другие примитивы из threading.