Skip to main content

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, daemon=True)

Важно: Задача должна быть вызываемой функцией (callable). Каждая задача может быть добавлена только один раз.

Удаление задач

Остановка и удаление задач с опциональным таймаутом:

# Удаление одной задачи
runner.remove(my_task)

# Удаление нескольких задач с таймаутом
runner.remove(task1, task2, timeout=2.0)

При удалении задачи, гринлет будет корректно завершён.

Запуск runner

# Запуск основного цикла (блокирующий вызов)
runner.run()

Метод run() блокирует выполнение до получения сигнала SIGTERM или SIGINT (Ctrl+C).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gevent_runner-0.0.2.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gevent_runner-0.0.2-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file gevent_runner-0.0.2.tar.gz.

File metadata

  • Download URL: gevent_runner-0.0.2.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

Hashes for gevent_runner-0.0.2.tar.gz
Algorithm Hash digest
SHA256 eb590a4b5a8f3dd03bc924817bf42515d5f0e9cca38a28744db201f6a9183709
MD5 e0c5dc22362f15c8471099f8f68af4d9
BLAKE2b-256 d71a8113239376d1059245669411e3854e8c2c8017321cf75dc4cc49c76c4e35

See more details on using hashes here.

File details

Details for the file gevent_runner-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: gevent_runner-0.0.2-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

Hashes for gevent_runner-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ec045bc7d45bfcd8e8c1bcde3a3fa0e070ec163455d57bdf1e9846f4fb015dcb
MD5 f2e2418f9d68bb83f7f82ef063fde23f
BLAKE2b-256 bdc34a6de52f2c9a83862f1d772a7d4d81db724fb2e0831fbc92322cf74e5735

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page