Sobes.tech
Back to questions
Junior — Middle
58

Какими способами можно добиться одновременного выполнения потоков в Python, учитывая ограничение GIL?

Answer from AI

sobes.tech AI

В Python глобальная блокировка интерпретатора (GIL) ограничивает одновременное выполнение байт-кода в нескольких потоках, что затрудняет параллелизм в CPU-bound задачах. Чтобы добиться одновременного выполнения потоков, можно использовать:

  • Модуль multiprocessing — создает отдельные процессы, каждый со своим интерпретатором и памятью, что позволяет обходить GIL.
  • Использовать потоки (threading) для I/O-bound задач, где потоки ждут ввода-вывода и GIL не является узким местом.
  • Использовать библиотеки, реализующие вычисления на C/C++ без удержания GIL (например, NumPy), что позволяет выполнять вычисления параллельно.

Пример с multiprocessing:

from multiprocessing import Pool

def f(x):
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        print(p.map(f, [1, 2, 3, 4]))

Таким образом, для CPU-bound задач предпочтительно использовать процессы, а для I/O-bound — потоки.