PYTHONOMANIA
273 subscribers
195 photos
3 videos
1 file
616 links
Откройте для себя мир Python в PYTHONOMANIA!

Идеально подходит как для начинающих, так и для опытных разработчиков. Присоединяйтесь к нам, чтобы достичь совершенства в Python!

Сайт: https://pythonomania.github.io/
Download Telegram
📱Bocpy.

Bocpy —
это библиотека для Python, реализующая принципиально новую парадигму параллельного программирования — поведенческо-ориентированную конкурентность (Behavior-Oriented Concurrency, BOC).

В параллельном коде на Python часто возникают состояния гонки (data races), а с появлением сборки без GIL (free-threaded Python) защищать данные становится еще сложнее. bocpy решает эту проблему фундаментально: данные разделяются так, что каждый поток выполнения («поведение») получает уникальное временное владение объектом. Больше не нужно вручную управлять блокировками (lock.acquire()), а риск дедлоков исключен на уровне архитектуры.

🔹Главные фичи и преимущества:

🔘Фокус на потоке данных: Задача разработчика смещается с решения проблем параллельного доступа к простой организации логики. Функции оборачиваются в декораторы @when и со стороны выглядят как обычный линейный код.

🔘Настоящая многоядерность: Библиотека написана на C и использует механизм суб-интерпретаторов Python. Начиная с Python 3.12, где у каждого суб-интерпретатора свой собственный GIL (PEP 684), bocpy обеспечивает честный параллелизм и показывает практически линейное масштабирование (до 7.5× ускорения на 8 воркерах).

🔘Безопасность по умолчанию: Под капотом движок на C реализует двухфазное запирание (2PL) и MCS-очереди. Потоки изолированы друг от друга, поэтому данные обрабатываются так, будто программа работает в один поток.

🔘Поддержка тяжелых объектов (PinnedCown): Если объект не может быть передан между интерпретаторами (например, контекст GPU, файловые дескрипторы или UI-виджеты), его можно закрепить за главным потоком, не ломая параллельную работу остальных воркеров.

💻Как это выглядит в коде:

Вместо сложной синхронизации вы объявляете разделяемые ресурсы как Cown (concurrently-owned objects) и указываете, какие функции должны дождаться их готовности:

from bocpy import Cown, when, wait

# Создаем защищенные ресурсы
cheese = Cown(None)
meal = Cown(None)

# Задачи запустятся параллельно на разных ядрах
@when(cheese)
def buy_cheese(cheese):
cheese.value = "Пармезан"

@when(meal)
def order_meal(meal):
meal.value = "Салат"

# Этот блок выполнится автоматически, как только ОБОИ ресурсы освободятся
@when(cheese, meal)
def eat_dinner(cheese, meal):
print(f"Ужинаем: {meal.value} и {cheese.value}!")

wait() # Ждем завершения всех задач


📈Поддержка версий Python:

🔘Python 3.10 / 3.11: Полная совместимость, но из-за общего глобального GIL задачи будут выполняться последовательно. Подходит для отладки и портативности.

🔘Python 3.12+: Идеальный вариант. Задачи распределяются по суб-интерпретаторам со своими GIL и работают на полную мощность процессора.

🔘Python 3.13t+ (Free-threaded): Полная нативная поддержка сборки без GIL.

🔧Установка:

pip install bocpy


#Python #bocpy #Concurrency #Parallelism #GIL #Multithreading #SubInterpreters #Backend #OpenSource

📱Ссылка на репозиторий:
https://github.com/microsoft/bocpy
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🔥22