Встречается на собеседованиях • сегодня

С помощью чего можно совместить потоки и асинхронность

В Python для совмещения потоков (threading) и асинхронности (asyncio) можно использовать asyncio.to_thread() (Python 3.9+) или loop.run_in_executor(). Это позволяет запускать блокирующие операции в отдельных потоках, не блокируя event loop.

Пример с asyncio.to_thread():

python
import asyncio
import time

async def async_task():
print("Async task started")
await asyncio.sleep(1)
print("Async task finished")

async def main():
# Запускаем блокирующую функцию в потоке
result = await asyncio.to_thread(time.sleep, 2)
await async_task()

asyncio.run(main())

text

Для более сложных сценариев можно использовать `ThreadPoolExecutor`:
```python
from concurrent.futures import ThreadPoolExecutor
import asyncio

def blocking_io():
    # Блокирующая операция
    time.sleep(2)
    return "Done"

async def main():
    loop = asyncio.get_running_loop()
    with ThreadPoolExecutor() as pool:
        result = await loop.run_in_executor(pool, blocking_io)
        print(result)

Важно помнить, что GIL все равно ограничивает параллельное выполнение Python-кода в потоках.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы