🖥 Python: Почему твой asyncio-код тормозит и блокируется?
Чаще всего проблема не в самом asyncio, а в том, что внутри async-функций ты вызываешь блокирующий код. Например, time.sleep, requests.get, тяжёлые циклы с вычислениями или работа с диском без специальных обёрток. Такой вызов останавливает весь event loop, и остальные корутины тупо ждут.
Главное правило: внутри async-функций каждая долгая операция должна либо быть асинхронной (через await), либо вынесена в поток или процесс. Если в корутине нет нормальных await, она вообще не отдаёт управление циклу, и твой «асинхронный» код ведёт себя как обычный синхронный.
Используй:
- асинхронные библиотеки (aiohttp вместо requests и т.п.);
- asyncio.sleep вместо time.sleep;
- asyncio.to_thread или отдельный процесс для тяжёлых синхронных задач.
Как только уберёшь блокирующие вызовы из корутин, код перестанет «залипать» и начнёт реально работать параллельно по I/O.
import asyncio
import time
async def bad_task():
print("start bad")
time.sleep(2)
print("end bad")
async def good_task():
print("start good")
await asyncio.to_thread(time.sleep, 2)
print("end good")
async def main():
await asyncio.gather(bad_task(), good_task())
asyncio.run(main())
https://www.youtube.com/shorts/LZgy5YvQR4o
@Python_Community_ru
Чаще всего проблема не в самом asyncio, а в том, что внутри async-функций ты вызываешь блокирующий код. Например, time.sleep, requests.get, тяжёлые циклы с вычислениями или работа с диском без специальных обёрток. Такой вызов останавливает весь event loop, и остальные корутины тупо ждут.
Главное правило: внутри async-функций каждая долгая операция должна либо быть асинхронной (через await), либо вынесена в поток или процесс. Если в корутине нет нормальных await, она вообще не отдаёт управление циклу, и твой «асинхронный» код ведёт себя как обычный синхронный.
Используй:
- асинхронные библиотеки (aiohttp вместо requests и т.п.);
- asyncio.sleep вместо time.sleep;
- asyncio.to_thread или отдельный процесс для тяжёлых синхронных задач.
Как только уберёшь блокирующие вызовы из корутин, код перестанет «залипать» и начнёт реально работать параллельно по I/O.
import asyncio
import time
async def bad_task():
print("start bad")
time.sleep(2)
print("end bad")
async def good_task():
print("start good")
await asyncio.to_thread(time.sleep, 2)
print("end good")
async def main():
await asyncio.gather(bad_task(), good_task())
asyncio.run(main())
https://www.youtube.com/shorts/LZgy5YvQR4o
@Python_Community_ru
YouTube
🔥 Python: Почему твой asyncio-код тормозит и блокируется? #python #ai #питона #asyncio
Чаще всего проблема не в самом asyncio, а в том, что внутри async-функций ты вызываешь блокирующий код. Например, time.sleep, requests.get, тяжёлые циклы с в...
🔥2
🏎️ F1 Race Replay: Визуализация гонок Формулы 1 🏁
Приложение на Python для интерактивного воспроизведения гонок Формулы 1 с графическим интерфейсом. Позволяет отслеживать позиции гонщиков в реальном времени, отображать текущие круги и статус водителей, а также управлять воспроизведением с помощью удобных контролов.
🚀 Основные моменты:
- Визуализация гонок с реальными позициями на треке
- Живое обновление позиций гонщиков и их состояния
- Интерактивные элементы управления воспроизведением
- Подробная информация о телеметрии выбранных гонщиков
- Возможность настройки интерфейса и обработки данных
📌 GitHub: https://github.com/IAmTomShaw/f1-race-replay
#python
@Python_Community_ru
Приложение на Python для интерактивного воспроизведения гонок Формулы 1 с графическим интерфейсом. Позволяет отслеживать позиции гонщиков в реальном времени, отображать текущие круги и статус водителей, а также управлять воспроизведением с помощью удобных контролов.
🚀 Основные моменты:
- Визуализация гонок с реальными позициями на треке
- Живое обновление позиций гонщиков и их состояния
- Интерактивные элементы управления воспроизведением
- Подробная информация о телеметрии выбранных гонщиков
- Возможность настройки интерфейса и обработки данных
📌 GitHub: https://github.com/IAmTomShaw/f1-race-replay
#python
@Python_Community_ru
🔥1