Pyper — это гибкий инструмент для конкурентной и параллельной обработки данных, основанный на принципах функционального программирования.
import asyncio
import time
from pyper import task
def get_data(limit: int):
for i in range(limit):
yield i
async def step1(data: int):
await asyncio.sleep(1)
print("Async завершён:", data)
return data
def step2(data: int):
time.sleep(1)
print("Sync завершён:", data)
return data
def step3(data: int):
for i in range(10_000_000):
_ = i * i
print("Тяжёлая операция завершена:", data)
return data
async def main():
pipeline = task(get_data, branch=True) \
| task(step1, workers=20) \
| task(step2, workers=20) \
| task(step3, workers=20, multiprocess=True)
total = 0
async for output in pipeline(limit=20):
total += output
print("Итог:", total)
if __name__ == "__main__":
asyncio.run(main())
Конвейер: задачи связываются с помощью оператора | (аналог Unix pipe).
Виды задач:
Данные передаются между задачами через очереди для обеспечения конкурентного выполнения.
#Python #Pyper #DataProcessing #Concurrency #Parallelism #ETL #OpenSource #FunctionalProgramming
https://github.com/pyper-dev/pyper
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - pyper-dev/pyper: Concurrent Python made simple
Concurrent Python made simple. Contribute to pyper-dev/pyper development by creating an account on GitHub.
1🔥3👍1
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