Celery Beat Windows 简单示例(非 Django)

4 投票
1 回答
2225 浏览
提问于 2025-04-17 20:45

我在Windows 7上设置定期任务时遇到了很大的困难(可惜我现在只能用这个系统)。我用CherryPy写的应用程序会使用Celery,所以Django的库在这里不相关。我只想要一个简单的例子,教我如何在后台启动Celery Beat进程。常见问题解答部分提到以下内容,但我还没能实际做到:

Windows

worker的-B / –beat选项不工作?¶

回答:没错。要将celery beat和celery worker作为独立的服务运行。

我的项目结构如下:

proj/
    __init__.py (empty)
    celery.py
    celery_schedule.py
    celery_settings.py (these work
    tasks.py

celery.py:

from __future__ import absolute_import

from celery import Celery
from proj import celery_settings
from proj import celery_schedule

app = Celery(
    'proj',
    broker=celery_settings.BROKER_URL,
    backend=celery_settings.CELERY_RESULT_BACKEND,
    include=['proj.tasks']
)

# Optional configuration, see the application user guide.
app.conf.update(
     CELERY_TASK_RESULT_EXPIRES=3600,
     CELERYBEAT_SCHEDULE=celery_schedule.CELERYBEAT_SCHEDULE
)

if __name__ == '__main__':
    app.start()

tasks.py

from __future__ import absolute_import

from proj.celery import app


@app.task
def add(x, y):
    return x + y

celery_schedule.py

 from datetime import timedelta

 CELERYBEAT_SCHEDULE = {
     'add-every-30-seconds': {
          'task': 'tasks.add',
          'schedule': timedelta(seconds=3),
          'args': (16, 16)
     },
 }

在命令行中运行“celery worker --app=proj -l info”(在“proj”的父目录下)可以很好地启动worker线程,我可以从Python终端执行添加任务的操作。但是,我就是搞不清楚怎么启动beat服务。显然,语法可能也不对,因为我还没有找到缺失的--beat选项。

1 个回答

2

只需通过一个新的终端窗口启动另一个进程,确保你在正确的文件夹里,然后执行命令 celery beat(在 beat 这个关键词前不需要加'--')。

如果这样做还是不能解决你的问题,可以把你的 celery_schedule.py 文件重命名为 celeryconfig.py,然后在你的 celery.py 文件中加入这一行:app.config_from_object('celeryconfig'),放在 name == main 之前。

接着再启动一个新的 celery beat 进程:celery beat。

撰写回答