The greenlet launch tool
Project description
Gevent Runner
Gevent Runner — это инструмент для управления задачами на основе гринлетов (greenlets) в Python с использованием библиотеки gevent.
Возможности
- ✅ Запуск нескольких конкурентных задач одновременно
- ✅ Динамическое добавление и удаление задач в процессе работы
- ✅ Корректная обработка сигналов завершения (SIGTERM, SIGINT)
- ✅ Потокобезопасное управление задачами
Установка
Из исходников
pip install -e .
Для разработки
pip install -e ".[dev]"
Требования
- Python >= 3.10
- gevent == 24.11.1
Быстрый старт
Базовый пример
Создайте несколько задач и запустите их одновременно:
import time
import gevent
from classic.gevent_runner.runner import GreenletRunner
def print_numbers():
count = 0
while True:
count += 1
print(f"[Numbers Task] Count: {count}")
gevent.sleep(2)
def print_timestamp():
while True:
current_time = time.strftime("%H:%M:%S")
print(f"[Timestamp Task] Current time: {current_time}")
gevent.sleep(3)
def print_heartbeat():
while True:
print(f"[Heartbeat Task] System is alive!")
gevent.sleep(5)
def main():
print("Starting GreenletRunner with 3 concurrent tasks...")
print("Press Ctrl+C to stop all tasks\n")
# Создаём экземпляр runner
runner = GreenletRunner()
# Добавляем задачи в runner
runner.add(print_numbers, print_timestamp, print_heartbeat)
# Запускаем главный цикл (блокирует выполнение до получения SIGTERM или SIGINT)
runner.run()
print("\nAll tasks stopped gracefully.")
if __name__ == "__main__":
main()
Вывод:
Starting GreenletRunner with 3 concurrent tasks...
Press Ctrl+C to stop all tasks
[Numbers Task] Count: 1
[Timestamp Task] Current time: 12:34:56
[Numbers Task] Count: 2
[Heartbeat Task] System is alive!
[Timestamp Task] Current time: 12:34:59
...
Нажмите Ctrl+C для корректной остановки всех задач.
Использование
Создание runner
from classic.gevent_runner.runner import GreenletRunner
runner = GreenletRunner()
Добавление задач
Вы можете добавить одну или несколько задач одновременно:
# Добавление одной задачи
runner.add(my_task)
# Добавление нескольких задач
runner.add(task1, task2, task3)
# Добавление задачи с демоном
runner.add(task1, is_daemon=True)
Важно: Задача должна быть вызываемой функцией (callable). Каждая задача может быть добавлена только один раз.
Удаление задач
Остановка и удаление задач с опциональным таймаутом:
# Удаление одной задачи
runner.remove(my_task)
# Удаление нескольких задач с таймаутом
runner.remove(task1, task2, timeout=2.0)
При удалении задачи, гринлет будет корректно завершён.
Запуск runner
# Запуск основного цикла (блокирующий вызов)
runner.run()
Метод run() блокирует выполнение до получения сигнала SIGTERM или SIGINT (Ctrl+C).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gevent_runner-0.0.1.tar.gz.
File metadata
- Download URL: gevent_runner-0.0.1.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b7631b643901017d28af2f148e1d5be9f4329e42375c7553a0a4698692a27f5
|
|
| MD5 |
389983702a0faa93965a5f450abf41ae
|
|
| BLAKE2b-256 |
1c83fe5fa1690e36b3956210b7da6d8c8775ea6525432b58e15f75ca3b5a59d2
|
File details
Details for the file gevent_runner-0.0.1-py3-none-any.whl.
File metadata
- Download URL: gevent_runner-0.0.1-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0511bcc7d6bcc6ebec37082a1be3d532d094984cebcc436f670d684281b73121
|
|
| MD5 |
5ed10319fc27f4a5267392b16759e139
|
|
| BLAKE2b-256 |
cd23e5047eb0eb6df56a7fe2b6a6bad38bc68853bb8e3c6ca1166c0933416bcf
|