跳转到主要内容

asyncio任务管理器

项目描述

Donald – 一个快速简单的Asyncio任务管理器。

Donald支持同步和异步范式。该包在多循环中运行协程和函数。Donald可以运行周期性任务并监听AMQP队列。

Tests Status PYPI Version Python Versions

需求

  • python 3.8+

安装

Donald 应使用pip安装

pip install donald

支持redis

pip install donald[redis]

快速开始

初始化任务管理器

# Init Donald
manager = Donald(

    # Params (default values)
    # -----------------------

    # Setup logging
    log_level=logging.INFO,
    log_config=None,

    # Choose a backend (memory|redis|amqp)
    # memory - is only recommended for testing/local development
    backend='memory',

    # Backend connection params
    # redis: {'url': 'redis://localhost:6379/0', 'channel': 'donald'}
    # amqp: {'url': 'amqp://guest:guest@localhost:5672/', 'queue': 'donald', 'exchange': 'donald'}
    backend_params={},

    # Tasks worker params
    worker_params={
      # Max tasks in work
      'max_tasks': 0,

      # Tasks default params (delay, timeout)
      'task_defaults': {},

      # A awaitable function to run on worker start
      'on_start': None

      # A awaitable function to run on worker stop
      'on_stop': None

      # A awaitable function to run on worker error
      'on_error': None

    },
)

# Wrap a function to task
@manager.task
async def myfunc(*args, **kwargs):
    # Do some job here

# Start the manager somewhere (on app start for example)
await manager.start()

# you may run a worker in the same process
# not recommended for production
worker = manager.create_worker()
worker.start()

# ...

# Submit the task to workers
myfunc.submit(*args, **kwargs)

# ...

# Stop the manager when you need
await worker.stop()
await manager.stop()

安排任务

@tasks.schedule('*/5 * * * *')  # Supports cron expressions, number of seconds, timedelta
@tasks.task
async def myfunc(*args, **kwargs):
    """Run every 5 minutes"""
    # Do some job here


# you may run a scheduler in the same process
# not recommended for production
manager.scheduler.start()

# ...

# Stop the scheduler before stop the tasks manager
manager.scheduler.stop()

在生产环境中运行

在应用中的某处创建任务管理器 tasks.py

manager = Donald(backend='amqp')

# Setup your tasks and schedules.
# See the Quick Start section for details.

在单独进程中运行工作进程

$ donald -M tasks.manager worker

(如果需要)在单独进程中运行调度器

$ donald -M tasks.manager scheduler

错误跟踪器

如果您有任何建议、错误报告或烦恼,请向https://github.com/klen/donald/issues 的问题跟踪器报告

贡献

入门项目的开发发生在github: https://github.com/klen/donald

许可协议

MIT许可下许可。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

donald-0.32.5.tar.gz (13.4 kB 查看哈希值)

上传时间

构建分布

donald-0.32.5-py3-none-any.whl (12.7 kB 查看哈希值)

上传时间 Python 3

由以下组织支持