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

Uploaded Python 3

File details

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

File metadata

  • Download URL: gevent_runner-0.0.3.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.3.tar.gz
Algorithm Hash digest
SHA256 65c2fe4a45de3b94ad69970bd65d45cc811f94a9705f784675cf642b36754d62
MD5 1e4d396169748959bffb2eafe86cabfe
BLAKE2b-256 21b9f5fa5e1542561081ba8aab2d0bbf0e52c0711fcaa674d92f07e5bc38c951

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gevent_runner-0.0.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d4890043c3e78da59323497f2c81b4ffa479da0e31d8a69d44f0e8db0074e59a
MD5 375526ef9add2f13cab9dbffc42b1b32
BLAKE2b-256 7d10cbe4e5e0c68f5500358edde7abe9d30dff2489b871f00e098ec0656ddf22

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