python - Django-Celery 没有周期性输出
问题描述
我正在尝试使用 Celery 在我的应用程序中创建定期任务。但是,我看不到我编写的周期性任务的输出。
后端位于基于 Windows 的 redis 服务器上。服务器已启动并正在运行。
项目/芹菜.py
import os
from celery import Celery
from celery.schedules import crontab
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nttracker.settings')
app = Celery
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
app.conf.update(
result_expires=3600,
)
@app.task
def add(x, y):
z = x + y
print(z)
app.conf.beat_schedule = {
'add-every-30-seconds': {
'task': 'tasks.add',
'schedule': 30.0,
'args': (16, 16)
},
}
if __name__ == '__main__':
app.start()
项目/tests.py
from __future__ import absolute_import
import django
django.setup()
from .celery import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
但是,当我跑步时celery -A project worker --pool=solo -l INFO
,我得到:
-------------- celery@LAPTOP-A0OM125L v5.0.5 (singularity)
--- ***** -----
-- ******* ---- Windows-10-10.0.19041-SP0 2021-06-04 16:45:29
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: nttracker:0x22698b76340
- ** ---------- .> transport: redis://127.0.0.1:6379//
- ** ---------- .> results:
- *** --- * --- .> concurrency: 12 (solo)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. nttracker.celery.add
. nttracker.celery.debug_task
. nttracker.tasks.add
. nttracker.tasks.mul
. nttracker.tasks.xsum
[2021-06-04 16:45:30,017: INFO/MainProcess] Connected to redis://127.0.0.1:6379//
[2021-06-04 16:45:30,028: INFO/MainProcess] mingle: searching for neighbors
[2021-06-04 16:45:31,059: INFO/MainProcess] mingle: all alone
[2021-06-04 16:45:31,079: WARNING/MainProcess] c:\users\warren\onedrive\desktop\github_new\nttracker\venv\lib\site-packages\celery\fixups\django.py:203: UserWarning: Using settings.DEBUG leads to a memory
leak, never use this setting in production environments!
warnings.warn('''Using settings.DEBUG leads to a memory
[2021-06-04 16:45:31,080: INFO/MainProcess] celery@LAPTOP-A0OM125L ready.
问题是程序没有输出add(x, y)
我希望的数字。谁能指出我的问题在哪里?
提前致谢。
解决方案
您需要开始celery beat
,因为他将读取数据库并执行您的任务。
安装:https ://github.com/celery/django-celery-beat
所以在 CLI 中,你需要执行:
celery -A project worker --pool=solo -l INFO
celery -A project beat -S django
你可以守护节拍celery -A project beat -S django --detach
cdlt,
推荐阅读
- python - 这是在迭代时从字典中删除项目的正确方法吗?
- next.js - 在没有组件的情况下在 NextJS 中获取查询参数
- c++ - 如何拆分arduino代码中的数字?
- javascript - 当从 Codebehind 更新文本框时,为什么 asp:UpdatePanel 不改变我的 ASP:Textbox 的值?
- javascript - 如何创建具有内置决策和事件触发的自定义 useReducer
- reactjs - 如何在 React 中异步更新同一数组中的多个对象?
- python - PyTwain excTWCC_SEQERROR:正确的状态序列是什么?
- c++ - 为什么这个 x86 shellcode 运行成功但随后触发了违规执行位置?
- javascript - 为什么我在 Next.js 中得到这个?具有无效的“imagesrcset”值
- java - 将 SQL 原生查询转换为 HQL 查询