Bocpy — это библиотека для Python, реализующая принципиально новую парадигму параллельного программирования — поведенческо-ориентированную конкурентность (Behavior-Oriented Concurrency, BOC).
В параллельном коде на Python часто возникают состояния гонки (data races), а с появлением сборки без GIL (free-threaded Python) защищать данные становится еще сложнее.
bocpy решает эту проблему фундаментально: данные разделяются так, что каждый поток выполнения («поведение») получает уникальное временное владение объектом. Больше не нужно вручную управлять блокировками (lock.acquire()), а риск дедлоков исключен на уровне архитектуры.@when и со стороны выглядят как обычный линейный код.bocpy обеспечивает честный параллелизм и показывает практически линейное масштабирование (до 7.5× ускорения на 8 воркерах).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() # Ждем завершения всех задач
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
GitHub
GitHub - microsoft/bocpy: Behavior-Oriented Concurrency in Python
Behavior-Oriented Concurrency in Python. Contribute to microsoft/bocpy development by creating an account on GitHub.
3👍2🔥2 2