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

Python Middle Без компании
С помощью чего можно совместить потоки и асинхронность
Ответы
В Python для совмещения потоков (`threading`) и асинхронности (`asyncio`) можно использовать `asyncio.to_thread()` (Python 3.9+) или `loop.run_in_executor()`. Это позволяет запускать блокирующие операции в отдельных потоках, не блокируя event loop. Пример с `asyncio.to_thread()`: ``` 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()) ``` Для более сложных сценариев можно использовать `ThreadPoolExecutor`: ``` 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-кода в потоках.