Sobes.tech
Back to questions
Middle+
1

Расскажи про способы выполнения кода в Python: многопроцессорность, многопоточность, асинхронность.

Companies where asked
X5 techX5 tech

Answer from AI

sobes.tech AI

В Python существуют три основных способа выполнения кода параллельно или асинхронно:

  1. Многопроцессорность (multiprocessing)

    • Использует несколько процессов, каждый с собственной памятью.
    • Обходит ограничение GIL (Global Interpreter Lock), позволяя эффективно использовать несколько ядер CPU.
    • Подходит для CPU-интенсивных задач.
    • Пример:
    from multiprocessing import Pool
    
    def f(x):
        return x*x
    
    with Pool(4) as p:
        print(p.map(f, [1, 2, 3, 4]))
    
  2. Многопоточность (threading)

    • Использует несколько потоков внутри одного процесса.
    • Из-за GIL в CPython только один поток выполняет байт-код Python в любой момент времени.
    • Хорошо подходит для задач с большим количеством операций ввода-вывода (I/O), где потоки ждут ответа.
    • Пример:
    import threading
    
    def worker():
        print("Работа в потоке")
    
    t = threading.Thread(target=worker)
    t.start()
    t.join()
    
  3. Асинхронность (asyncio)

    • Основана на событийном цикле и корутинах.
    • Позволяет писать неблокирующий код, эффективно используя время ожидания операций ввода-вывода.
    • Не создаёт новые потоки или процессы, работает в одном потоке.
    • Подходит для высоконагруженных сетевых приложений.
    • Пример:
    import asyncio
    
    async def main():
        print('Hello')
        await asyncio.sleep(1)
        print('World')
    
    asyncio.run(main())
    

Выбор способа зависит от задачи: для CPU-интенсивных — multiprocessing, для I/O-интенсивных — threading или asyncio.