Как передать данные между потоками
Python
Middle
СБЕР Центр ИИ
Как передать данные между потоками
Ответы
В Python для передачи данных между потоками можно использовать несколько подходов:
- **Очереди (Queue)** - потокобезопасный способ. Пример:
```
from queue import Queue
from threading import Thread
def worker(q):
while True:
item = q.get()
print(f'Обработано: {item}')
q.task_done()
q = Queue()
Thread(target=worker, daemon=True).start()
q.put('данные1')
q.put('данные2')
q.join() # ждем завершения обработки
```
- **Глобальные переменные** - требует синхронизации через Lock:
```
from threading import Lock
shared_data = []
lock = Lock()
def thread_func():
with lock:
shared_data.append('value')
```
- **Event или Condition** - для уведомлений между потоками.
Очереди (Queue) - наиболее предпочтительный способ, так как они изначально потокобезопасны и предоставляют удобный интерфейс для producer-consumer взаимодействия. Глобальные переменные требуют ручной синхронизации и могут привести к race condition, если не использовать Lock.