Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: threading, multiprocessing, synchronization

Как потоки/процессы обмениваются данными (очереди, общие ресурсы)?

Проверяет знание механизмов взаимодействия между параллельными задачами.

Короткий ответ

Потоки используют общую память, но требуют блокировок (Lock), чтобы избежать гонки данных. Процессы не имеют общей памяти, поэтому обмениваются данными через Queue, Pipe или разделяемые объекты (Manager).

Длинный ответ

1. Для потоков (threading):

  • Общая память: Потоки одного процесса могут читать/писать в одни переменные.

  • Риск: Гонка данных (race condition), когда несколько потоков меняют данные одновременно.

  • Решение: Использовать Lock или RLock.

    from threading import Thread, Lock
    counter = 0
    lock = Lock()
    
    def increment():
        	global counter
        	with lock:  # Блокируем доступ
            	counter += 1
    
    threads = [Thread(target=increment) for _ in range(100)]
    for t in threads: t.start()
    for t in threads: t.join()
    print(counter)  # 100

2. Для процессов (multiprocessing):

  • Очередь (Queue): Безопасный способ обмена данными.

    from multiprocessing import Process, Queue
    
    def worker(q):
        	q.put("Данные из процесса")
    
    q = Queue()
    p = Process(target=worker, args=(q,))
    p.start()
    print(q.get())  # "Данные из процесса"
    p.join()
  • Разделяемая память (Value, Array):

    from multiprocessing import Process, Value
    
    def increment(shared_val):
        	shared_val.value += 1
    
    counter = Value("i", 0)
    p = Process(target=increment, args=(counter,))
    p.start()
    p.join()
    print(counter.value)  # 1
  • Менеджер (Manager): Создаёт объекты, доступные из разных процессов.

Вывод:

  • Для I/O-задач (сеть, файлы) используйте потоки с Lock.

  • Для CPU-задач — процессы с Queue/Manager.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#threading

#multiprocessing

#synchronization

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.