All streams
Search
Write a publication
Pull to refresh

Comments 21

и я думаю, что в 20026 году можно начинать внедрять free-threading в каких-то узких, хорошо тестируемых сценариях.

По Фрейду оговорочка)

По-моему зря это они. Раньше, написав код без использования async/await, можно было надеяться, что в середину твоего `a += 1` никто не вклинится. А теперь придётся задумываться над каждой строкой, как в Go.

Вот только если не изменяет память, то "почему-то" лучше всегда считалось не "надеяться" а писать потокобезопасно.

можно было надеяться, что в середину твоего a += 1 никто не вклинится.

Но ведь вклинится?

Штоб не вклинивалось, GIL как раз придумали.

GIL не предотвращает вклинивание, += не «атомарная» операция

Так если код выполняется асинхронно однопоточно, то синхронные блоки атомарны, разве нет?

Наконец-то нормальным языком, спасибо! Мне ChatGPT во время вайб-кодингового упражнения вдруг в середине начал предлагать async в тех местах, где обычно раньше реализовывал через await и не мог нормально объяснить почему и зачем.

Все бы хорошо, но при преходе с версиии на версию нужные тебе библиотеки почти всегда отваливаюттся, деже если это экосистема pip.

Асинхронщину не все понимают. Плюс, она не всем нужна. Автор оригинала замечательной статьи конечно не прочтет, но хоть тут останется.

Почему не выполнилась эта функция? Ой, я забыл сделать для неё await.

У некоторых разработчиков кривые руки, раз они забывают сделать await.

Ошибка в корутине? А ты точно запустил её с нужными параметрами?

Ого, корутину можно запустить с неправильными параметрами... как и обычную функцию... как и всё что угодно.

asyncio не поддерживает асинхронные операции с файловой системой. Даже если файлы открываются с O_NONBLOCK, чтение и запись будут блокироваться.

Асинхронная работа с диском непосредственно в ОС реализована плохо, что каким-то образом является недостатком asyncio по сравнению с синхроным/многопоточным подходом.

В Textual я наблюдаю следующую часто возникающую проблему: разработчики тестируют конкурентность, добавляя вызов a time.sleep(10), чтобы симулировать планируемую ими работу.

У некоторых разработчиков кривые руки, ведь они в асинхронных функциях пишут синхронный time.sleep().

C#, язык, из которого позаимствован синтаксис async/await, имеет более широкую поддержку async в базовых библиотеках ввода-вывода, потому что он реализует Task‑based Asynchronous Pattern (TAP), где задачи диспетчеризируются в управляемом пуле потоков.

Здесь всё верно. Асинхронность в питоне плохо вплетена в язык. Многие модули со временем получают асинхронные альтернативы (например, subprocesses), но этого мало.

Я мейнтейнер пакетов, поэтому могу сказать, что поддержка и синхронных, и асинхронных API — сложная задача.

Это действительно так. Разработчики библиотек в принципе всегда страдают, так как им нужно поддерживать кучу платформ, языков, парадигм разработки. Обычные пользователи языка, коих большинство, обычно пишут либо только синхронный код, либо асинхронный с впиливанием многопоточности/многопроцессорности и не страдают от этой проблемы.

Лично я уже слабо себе представляю разработку на питоне без асинхронности, но как уже написали выше:

Асинхронщину не все понимают. Плюс, она не всем нужна.

SQLAlchemy, самый популярный ORM для Python, добавил поддержку asyncio только в 2023 году

Накостылировал через greenlet

Мой внутренний перфекционист отказывается считать это поддержкой asyncio

"Ещё один всё понял"
В Python и Rust есть проблема красно-синих функций. Асинхронный и синхронный код — два разных плохо совместимых мира. Что с этим делать и как жить — непонятно. Есть предложения различной степени удачности.

Первые версии Python 3 (3.0-3.4) в основном делали упор на стабильность и упрощение перехода пользователей с версии 2.7.

Те кто застал эти версии сейчас тихонько посмеялись.

Ну там был 2to3 и это даже работало

потому что питон, это не про производительность и по-моему о ней там никогда не думали при дизайне языка. это все из серии "пределаем спойлеры к запорожцу" - я б не сказал, что это прям совсем не имеет смысла, потому что даже запорожец может разогнаться вниз по наклону с горки, но такие горки встречаться будут не часто.

Побочный квест: почему файловый ввод-вывод не асинхронный?

для того, чтобы он давал какой-то заметный выигрыш надо прокачивать ощутимые объемы данных, а это опять далеко от типичных задач для питона.

Про обновление Питона звучит, как шутка.
Последняя стабильная версия 3.12 (а буквально недавно 3.11 была), поэтому мы и не переходим. Также не все версии пакетов работают (привет atheris от google для фаззинг-тестирования)

Так-то последняя стабильная ветка 3.13 уже. Уже 3.14 на подходе, в октябре планируются.

Ой да ладно, в жс async await используется на уровне подкорки, всё ок, не обязательно сетевой код писать.

Тредпулы для асинхронности - ну не знаю, это надо писать планировщик, что является трудоемкой задачей. В питоне настоящая асинхронность, на уровне системных вызовов - всё чётко, как мы любим.

Потому что главное достоинство Питона - низкий порог вхождения. Туда идут за этим. А не вот это вот всё. Для асинхронщины есть языки для профессионалов.

Sign up to leave a comment.

Articles