Месяц на free-threaded Python 3.14 в проде: разбор выписок ускорился в 5 раз, но граблей хватает

Рейтинг: 37.6% · 5 голосов
Python, Rust, Go, C++, C#, Java, Kotlin: синтаксис, паттерны проектирования, производительность, многопоточность и сравнение языков.
Ответить
Аватара пользователя
sylvia666
Сообщения: 29
Зарегистрирован: 12 май 2026, 13:58

Месяц на free-threaded Python 3.14 в проде: разбор выписок ускорился в 5 раз, но граблей хватает

Сообщение sylvia666 »

Сервис разбирает банковские выписки и счета (XML, Excel, иногда PDF) для бухгалтерского SaaS. Классическая боль: задачи CPU-bound, GIL, multiprocessing с перекидыванием здоровенных словарей между процессами через pickle.

В мае перевели на free-threaded сборку 3.14. Ставится теперь элементарно: uv python install 3.14t, потом uv venv --python 3.14t — и поехали, никаких сборок из исходников, как во времена 3.13.

Цифры на нашем VPS (8 vCPU, 16 ГБ, обычный российский хостинг):
- пакет из 200 выписок: было 11 минут на multiprocessing с 6 воркерами, стало 2 мин 20 сек на ThreadPoolExecutor с 12 потоками;
- пиковая память: 2,1 ГБ против прежних 5,8 — потоки шарят данные, pickle-сериализация исчезла как класс;
- p99 на мелких задачах упал почти втрое, потому что нет затрат на спавн процессов.

Грабли тоже были, распишу ниже, если интересно. Но главное: оно реально работает, это уже не эксперимент.
👍1 ❤️ 🔥 😄1 🤔
✔ Лучший ответ сформирован автоматически — redisguru
Про гонки — справедливо, у нас за месяц вылезли две, обе в коде, который писался с мыслью «всё равно GIL спасёт». Одна — инкремент счётчика в общем словаре, вторая — самодельный кеш без локов. Починили через Lock и очереди, плюс прогнали нагрузочные тесты с повторами. А вот грабля, о которой мало пишут: если импортируешь C-расширение, которое не задекларировало поддержку free-threading, интерпрет…
Перейти к ответу →
Аватара пользователя
guardia
Сообщения: 49
Зарегистрирован: 11 май 2026, 14:59

Re: Месяц на free-threaded Python 3.14 в проде: разбор выписок ускорился в 5 раз, но граблей хватает

Сообщение guardia »

Главный вопрос: зачем, если multiprocessing и так работал? 11 минут против 2 — ок, но вы поменяли проверенную модель на потоки, где теперь возможны гонки в вашем же коде. В процессах изоляция бесплатная, а тут каждый общий словарик — потенциальная мина. На проде с деньгами (бухгалтерия же) я бы сто раз подумал.
👍1 ❤️ 🔥 😄 🤔1
Аватара пользователя
redisguru
Сообщения: 12
Зарегистрирован: 11 май 2026, 16:46

Re: Месяц на free-threaded Python 3.14 в проде: разбор выписок ускорился в 5 раз, но граблей хватает

Сообщение redisguru »

✔ Лучший ответ — сформирован автоматически
Про гонки — справедливо, у нас за месяц вылезли две, обе в коде, который писался с мыслью «всё равно GIL спасёт». Одна — инкремент счётчика в общем словаре, вторая — самодельный кеш без локов. Починили через Lock и очереди, плюс прогнали нагрузочные тесты с повторами.

А вот грабля, о которой мало пишут: если импортируешь C-расширение, которое не задекларировало поддержку free-threading, интерпретатор МОЛЧА включает GIL обратно. В логах только RuntimeWarning, который легко проспать. У нас так одна библиотека для работы с PDF вернула GIL на место, и мы день не понимали, почему на одном из сервисов потоки не дают прироста. Теперь на старте проверяем sys._is_gil_enabled() и роняем сервис, если GIL вдруг ожил.
👍 ❤️ 🔥1 😄1 🤔
Аватара пользователя
tomcruz
Сообщения: 29
Зарегистрирован: 12 май 2026, 18:25

Re: Месяц на free-threaded Python 3.14 в проде: разбор выписок ускорился в 5 раз, но граблей хватает

Сообщение tomcruz »

По экосистеме на середину 2026: numpy, pandas, pydantic, lxml, psycopg — у всех есть колёса под cp314t, ставится без бубна. Затыки начинаются на длинном хвосте: для одной либы распознавания штрихкодов колеса не нашлось, собирали из исходников, удовольствие ниже среднего. Перед миграцией тупо пройдитесь по requirements и проверьте каждую нативную зависимость — сэкономите день.
👍3 ❤️ 🔥 😄 🤔
Аватара пользователя
rsal56
Сообщения: 17
Зарегистрирован: 11 май 2026, 04:05

Re: Месяц на free-threaded Python 3.14 в проде: разбор выписок ускорился в 5 раз, но граблей хватает

Сообщение rsal56 »

Добавлю ложку дёгтя: однопоточный код на 3.14t процентов на 5-8 медленнее обычной сборки. Если у вас Django-монолит, где всё I/O-bound и упирается в постгрес, free-threading не даст ничего, кроме просадки. Это инструмент под конкретный профиль — CPU-bound с общими данными. Остальным как раньше: воркеры gunicorn и не выпендриваться.
👍 ❤️ 🔥 😄1 🤔
Аватара пользователя
aqwzsx
Сообщения: 11
Зарегистрирован: 13 май 2026, 05:55

Re: Месяц на free-threaded Python 3.14 в проде: разбор выписок ускорился в 5 раз, но граблей хватает

Сообщение aqwzsx »

Подтверждаю цифры топикстартера, у нас похожий профиль (рендеринг отчётов) и похожий результат — ускорение примерно в 4,5 раза против пула процессов при вдвое меньшей памяти.

Из неочевидного: иногда выгоднее не ThreadPoolExecutor, а InterpreterPoolExecutor, появившийся в 3.14 — изоляция почти как у процессов, но сильно дешевле. Мы им закрыли пару мест, где общие данные не нужны, а страх гонок остался.
👍1 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Языки программирования»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя