从 python 程序启动 celerybeat 而不使用命令行参数

co2*_*f2e 6 python celery celerybeat

我已经实现了一个启动 celery 的 python 命令

@click.command("tasks", help="run this command to start celery task queue")
def tasks():
    """
    Runs the celery task queue
    """
    from celery.bin import worker

    try:

        worker = worker.worker(app=app.config.get("task_app"))
        worker.run(app="my_app.task_queue", loglevel="info", uid=os.environ["uid"])
    except Exception as e:
        raise e
Run Code Online (Sandbox Code Playgroud)

我需要创建一个类似的命令来启动 celerybeat,我采用了以下方法

@click.command("tasks", help="run this command to start celery task queue")
def tasks():
    """
    Runs the celery task queue
    """
    from celery.bin import worker

    try:

        worker = worker.worker(app=app.config.get("task_app"))
        worker.run(app="my_app.task_queue", loglevel="info", uid=os.environ["uid"])
    except Exception as e:
        raise e
Run Code Online (Sandbox Code Playgroud)

--app 参数不适用于此方法。有没有办法让这个命令以编程方式工作celery -A proj beat而无需从命令行传递?

Eri*_*c L 5

以编程方式启动 celerybeat:

app.Beat(loglevel='debug').run()
Run Code Online (Sandbox Code Playgroud)

或者:

from celery.apps.beat import Beat

b = Beat(app=your_celery_app, loglevel='debug')
b.run()
Run Code Online (Sandbox Code Playgroud)

有关关键字参数,请参阅celery.beat文档