Sobes.tech
Назад к вопросам
Junior — Middle
72

Чем отличается реализация асинхронных операций через threading и через asyncio в Python?

Ответ от нейросети

sobes.tech AI

В Python threading и asyncio предоставляют разные подходы к выполнению асинхронных операций:

  • threading — это многопоточность, где создаются отдельные потоки ОС, которые могут выполняться параллельно. Подходит для задач, которые блокируют CPU или требуют параллельного выполнения. Однако из-за GIL (Global Interpreter Lock) в CPython потоки не могут одновременно выполнять байткод Python, что ограничивает эффективность многопоточности для CPU-bound задач.

  • asyncio — это библиотека для асинхронного программирования с использованием событийного цикла и корутин. Она не создает новые потоки, а переключается между задачами в одном потоке, когда одна из них ожидает завершения операции ввода-вывода. Это эффективно для I/O-bound задач и позволяет писать неблокирующий код.

Пример с asyncio:

import asyncio

async def say_hello():
    await asyncio.sleep(1)
    print('Hello')

async def main():
    await asyncio.gather(say_hello(), say_hello())

asyncio.run(main())

Пример с threading:

import threading
import time

def say_hello():
    time.sleep(1)
    print('Hello')

threads = [threading.Thread(target=say_hello) for _ in range(2)]
for t in threads:
    t.start()
for t in threads:
    t.join()