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, 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


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.1.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.1-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

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

Hashes for gevent_runner-0.0.1.tar.gz
Algorithm Hash digest
SHA256 7b7631b643901017d28af2f148e1d5be9f4329e42375c7553a0a4698692a27f5
MD5 389983702a0faa93965a5f450abf41ae
BLAKE2b-256 1c83fe5fa1690e36b3956210b7da6d8c8775ea6525432b58e15f75ca3b5a59d2

See more details on using hashes here.

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

Hashes for gevent_runner-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0511bcc7d6bcc6ebec37082a1be3d532d094984cebcc436f670d684281b73121
MD5 5ed10319fc27f4a5267392b16759e139
BLAKE2b-256 cd23e5047eb0eb6df56a7fe2b6a6bad38bc68853bb8e3c6ca1166c0933416bcf

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