и посмотреть медиа
Python Interview Questions - tests
и посмотреть медиа
Questions, tests and tasks for Python interviews.
Questions, tests and tasks for Python interviews.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Channel with questions for Python interviews. Tests, tasks and materials for preparation.
🤔 Почему вычислять большие значения в асинхронной функции плохо? Асинхронность (asyncio) в Python не выполняет код параллельно, а переключается между задачами во время ожидания (I/O-bound). Если в async-функции делать тяжёлые вычисления (CPU-bound), это блокирует asyncio, потому что в Python есть GIL (Global Interpreter Lock). 🚩Асинхронность в Python подходит для ввода-вывода (I/O-bound) Асинхронность позволяет выполнять задачи без блокировки, но только если они ждут чего-то (файлы, сеть, БД). import asyncio import aiohttp async def fetch(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text() async def main(): urls = ["Ссылка скрыта * 5 results = await asyncio.gather(*(fetch(url) for url in urls)) asyncio.run(main()) 🚩Проблема с `async` и тяжёлыми вычислениями (CPU-bound) Если в async-функции делать тяжёлые вычисления, Python не сможет переключаться между задачами. import asyncio async def heavy_task(n): print(f"Вычисляю {n}...") total = sum(i**2 for i in range(n)) # Долгий процесс return total async def main(): await asyncio.gather(heavy_task(10**7), heavy_task(10**7)) asyncio.run(main()) 🚩Как правильно выполнять вычисления в `async`? 🟠Использовать `asyncio.to_thread()` (делегирование в потоки) В Python 3.9+ можно выполнять CPU-задачи в отдельных потоках, не блокируя asyncio. import asyncio def heavy_computation(n): return sum(i**2 for i in range(n)) async def main(): result = await asyncio.to_thread(heavy_computation, 10**7) print(result) asyncio.run(main()) 🟠Использовать `multiprocessing` (запуск на нескольких ядрах) Так как Python использует GIL, единственный способ выполнять настоящий параллелизм — это multiprocessing. import asyncio import multiprocessing def heavy_computation(n): return sum(i**2 for i in range(n)) async def main(): loop = asyncio.get_running_loop() with multiprocessing.Pool() as pool: result = await loop.run_in_executor(pool, heavy_computation, 10**7) print(result) asyncio.run(main()) Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!