Этот вопрос проверяет знание основных подходов к параллельному и асинхронному выполнению кода в Python.
В Python есть три основных способа:
Многопоточность (threading) — легковесные потоки внутри одного процесса (но из-за GIL не подходит для CPU-задач).
Многопроцессорность (multiprocessing) — параллельное выполнение в отдельных процессах (обходит GIL, но требует больше ресурсов).
Асинхронность (asyncio) — неблокирующее выполнение задач в одном потоке (идеально для I/O-операций).
Python предлагает несколько методов для конкурентного выполнения кода, каждый со своими плюсами и ограничениями:
Многопоточность (threading)
Потоки делят память процесса, но из-за GIL (Global Interpreter Lock) только один поток исполняет Python-код одновременно.
Подходит для I/O-задач (например, сетевые запросы), где потоки могут ждать ответа без блокировки друг друга.
Пример:
import threading
def task():
print("Поток выполнен")
thread = threading.Thread(target=task)
thread.start()Многопроцессорность (multiprocessing)
Каждый процесс имеет свой интерпретатор и память, что обходит GIL.
Подходит для CPU-интенсивных задач (например, вычисления).
Пример:
from multiprocessing import Process
def task():
print("Процесс выполнен")
process = Process(target=task)
process.start()Асинхронность (asyncio)
Использует корутины и цикл событий для неблокирующего выполнения.
Эффективен для высоконагруженных I/O-приложений (веб-серверы, API).
Пример:
import asyncio
async def task():
print("Корутина выполнена")
asyncio.run(task())Вывод:
Для I/O: asyncio или threading.
Для CPU: multiprocessing.