芹菜周期性任务不是

2024-04-16 17:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django项目中使用芹菜来运行定期任务。遵循celery网站的标准教程,下面是我的项目结构 项目

|_ settings.py
|_ __init__.py
|_ celery_app.py (instead of celery.py)
|_ app
   |_ tasks.py

相关零件设置.py看起来像这样-

^{pr2}$

芹菜_应用程序副本看起来像这样-

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
app = Celery('project')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

在任务.py看起来像这样-

from __future__ import absolute_import
from celery.utils.log import get_task_logger
from celery import task
from celery_app import app

logger = get_task_logger(__name__)

@app.task
def test_task():
    for i in range(0, 4):
        logger.debug("celery test task")

当我管理芹菜工人,我可以看到我的任务被发现-

$ python manage.py celery -A project worker --loglevel=DEBUG --app=celery_app:app

 -------------- celery@-MBP.home v3.1.19 (Cipater)
---- **** ----- 
--- * ***  * -- Darwin-15.4.0-x86_64-i386-64bit
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         project:0x10d5b9a10
- ** ---------- .> transport:   amqp://sgcelery1:**@localhost:5672/sgceleryhost
- ** ---------- .> results:     djcelery.backends.database:DatabaseBackend
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- 
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . celery.backend_cleanup
  . celery.chain
  . celery.chord
  . celery.chord_unlock
  . celery.chunks
  . celery.group
  . celery.map
  . celery.starmap
  . app.tasks.test_task

[2016-04-24 23:54:55,452: INFO/MainProcess] Connected to amqp://sgcelery1:**@127.0.0.1:5672/sgceleryhost
[2016-04-24 23:54:55,471: INFO/MainProcess] mingle: searching for neighbors
[2016-04-24 23:54:56,481: INFO/MainProcess] mingle: all alone
[2016-04-24 23:54:56,497: WARNING/MainProcess] celery@-MBP.home ready.

当我运行beat时,它显示正在从中获取任务设置.py,但它从未真正运行过。在

$ python manage.py celery -A project beat --app=celery_app:app --loglevel=DEBUG

[2016-04-24 23:55:04,059: DEBUG/MainProcess] Current schedule:
<ModelEntry: test_task tasks.test_task(*[], **{}) {4}>

我错过了什么?在


Tags: 项目djangofrompytestimportprojectapp
1条回答
网友
1楼 · 发布于 2024-04-16 17:09:50

尝试设置CELERY_ALWAYS_EAGER = False。在

设置CELERY_ALWAYS_EAGER = True使任务同步运行,而不使用celery。通过将其切换为False,将使芹菜跳动起来,并定期运行它。当您不希望celery处理任务时,将在开发模式中使用False开关。在

签出文档here

相关问题 更多 >