🖥 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_be1
Чаще всего проблема не в самом 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_be1
YouTube
🔥 Python: Почему твой asyncio-код тормозит и блокируется? #python #ai #питона #asyncio
Чаще всего проблема не в самом asyncio, а в том, что внутри async-функций ты вызываешь блокирующий код. Например, time.sleep, requests.get, тяжёлые циклы с в...
🔥 Pyradio — бесплатная Python тулза, которая включает интернет-радио прямо из терминала.
Без браузера, без GUI и без мышки.
🗳 Установка:
```
sudo snap install pyradio
```
▶️ Использование:
Включаем случайную станцию:
```
pyradio —play
```
⬆️⬇️ выбираешь станцию стрелками
⏎ жмёшь Enter
♎️ GitHub/Инструкция (https://github.com/coderholic/pyradio)
#python #soft #github
@python_be1
Без браузера, без GUI и без мышки.
🗳 Установка:
```
sudo snap install pyradio
```
▶️ Использование:
Включаем случайную станцию:
```
pyradio —play
```
⬆️⬇️ выбираешь станцию стрелками
⏎ жмёшь Enter
♎️ GitHub/Инструкция (https://github.com/coderholic/pyradio)
#python #soft #github
@python_be1
Новая работа MIT: LLM, который видит и меняет состояние Python
В MIT предложили подход, при котором языковая модель работает не только с текстом, а напрямую с живым состоянием Python-кода - переменными, объектами в памяти и текущей точкой выполнения.
Подход называется NIGHTJAR.
Главный результат
В экспериментах NIGHTJAR сократил объем кода в среднем на 39.6% без потери корректности.
В чем была проблема
Обычная LLM:
- читает текст
- генерирует текст
- не видит реальные данные программы
Поэтому типичный пайплайн выглядит так:
- данные сериализуются в текст
- отправляются модели
- ответ парсится
- программа вручную обновляется
Много glue-кода, много мест для ошибок.
Что меняет совместное состояние
Shared state полностью меняет модель взаимодействия:
- LLM может читать и писать переменные
- изменять объекты прямо в памяти
- останавливать и пропускать циклы
- работать с текущим состоянием выполнения
Модель не «рассуждает о коде», она с ним взаимодействует.
Как это реализовано
LLM не получает прямой доступ к памяти.
Она отправляет небольшие команды:
- прочитать переменную
- записать значение
- обновить объект
- выйти из цикла
Python-обработчик выполняет эти команды.
Такой контракт авторы называют natural function interface.
Результаты
На бенчмарке SPSBench с 25 программами:
- корректность осталась на уровне ручной интеграции или выше
- код стал заметно короче
- но время выполнения иногда росло до 4.3 раза
Причина проста - каждое обращение к состоянию может требовать отдельного вызова модели.
Почему это важно
- меньше шаблонного glue-кода
- проще писать сложную логику с участием LLM
- шаг к более тесной интеграции AI и runtime
- фундамент для новых агентных и интерактивных систем
Это не про ускорение.
Это про изменение архитектуры взаимодействия между программой и моделью.
📌 Статья: arxiv.org/abs/2512.14805
#AI #LLM #Python
@python_be1
В MIT предложили подход, при котором языковая модель работает не только с текстом, а напрямую с живым состоянием Python-кода - переменными, объектами в памяти и текущей точкой выполнения.
Подход называется NIGHTJAR.
Главный результат
В экспериментах NIGHTJAR сократил объем кода в среднем на 39.6% без потери корректности.
В чем была проблема
Обычная LLM:
- читает текст
- генерирует текст
- не видит реальные данные программы
Поэтому типичный пайплайн выглядит так:
- данные сериализуются в текст
- отправляются модели
- ответ парсится
- программа вручную обновляется
Много glue-кода, много мест для ошибок.
Что меняет совместное состояние
Shared state полностью меняет модель взаимодействия:
- LLM может читать и писать переменные
- изменять объекты прямо в памяти
- останавливать и пропускать циклы
- работать с текущим состоянием выполнения
Модель не «рассуждает о коде», она с ним взаимодействует.
Как это реализовано
LLM не получает прямой доступ к памяти.
Она отправляет небольшие команды:
- прочитать переменную
- записать значение
- обновить объект
- выйти из цикла
Python-обработчик выполняет эти команды.
Такой контракт авторы называют natural function interface.
Результаты
На бенчмарке SPSBench с 25 программами:
- корректность осталась на уровне ручной интеграции или выше
- код стал заметно короче
- но время выполнения иногда росло до 4.3 раза
Причина проста - каждое обращение к состоянию может требовать отдельного вызова модели.
Почему это важно
- меньше шаблонного glue-кода
- проще писать сложную логику с участием LLM
- шаг к более тесной интеграции AI и runtime
- фундамент для новых агентных и интерактивных систем
Это не про ускорение.
Это про изменение архитектуры взаимодействия между программой и моделью.
📌 Статья: arxiv.org/abs/2512.14805
#AI #LLM #Python
@python_be1