TonIO - это многопоточный асинхронный рантайм для free-threaded Python (сборки без GIL), написанный на Rust поверх крейта
mio и вдохновленный архитектурой Tokio, Trio и TinyIO.В отличие от стандартного
asyncio, чей цикл событий (event loop) жестко привязан к одному системному потоку, TonIO спроектирован под реалии современного многопоточного Python 3.13+ (PEP 703): рантайм автоматически распределяет и исполняет корутины параллельно на нескольких ядрах процессора.tonio.colored предоставляет привычный синтаксис async / await.tonio позволяет писать асинхронный код через обычные генераторы и yield, полностью избавляя от проблемы «цветных функций».mio: Высокопроизводительный неблокирующий системный I/O (epoll, kqueue, IOCP) и планировщик задач прямо под капотом Python.tonio.scope() гарантирует корректную отмену и сбор всех дочерних корутин при выходе из контекста или возникновении исключений.tonio.select() для конкурентных гонок задач (отменяет оставшиеся корутины при первом завершении).Event и комбинируемые ожидатели Waiter через операторы пересечения и объединения (w1 & w2, w1 | w2).Lock, Semaphore, Barrier и каналы передачи сообщений (bounded и unbounded) с неблокирующими методами send_nowait / receive_nowait.open_tcp_stream, serve_tcp).tonio.io для подключения любых файловых дескрипторов ОС к системному поллеру.tonio.fs и управление подпроцессами (run_process, open_process).@pytest.mark.tonio и авто-режимом для тестирования асинхронного кода.С классическим синтаксисом
async / await:import tonio.colored as tonio
async def fetch_data(task_id: int):
await tonio.sleep(0.5)
return f"Результат {task_id}"
@tonio.main
async def main():
# Параллельный запуск задач в пуле потоков рантайма
parallel = tonio.spawn(
fetch_data(1),
fetch_data(2)
)
extra = await fetch_data(3)
res1, res2 = await parallel
print([res1, res2, extra])
main()
С синтаксисом на чистом
yield (без async/await):import tonio
def fetch_data(task_id: int):
yield tonio.sleep(0.5)
return f"Результат {task_id}"
@tonio.main
def main():
parallel = tonio.spawn(fetch_data(1), fetch_data(2))
extra = yield fetch_data(3)
res1, res2 = yield parallel
print([res1, res2, extra])
main()
⚠️ Важно: Проект находится в активной разработке (WIP), не совместим напрямую с объектами asyncio (для интеграций доступен проект-патчер TonIO-Monkey) и рассчитан исключительно на free-threaded Python без GIL.
#Python #Rust #TonIO #Async #NoGIL #FreeThreaded #Tokio #Concurrency #Multithreading #Performance #DevTools #OpenSource
https://github.com/gi0baro/tonio
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - gi0baro/tonio: A multi-threaded async runtime for Python
A multi-threaded async runtime for Python. Contribute to gi0baro/tonio development by creating an account on GitHub.
👍3🔥3