Celery Beat Windows 简单示例(非 Django)
我在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。