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 — потоки.