芹菜的不规则行为

Posted

技术标签:

【中文标题】芹菜的不规则行为【英文标题】:Irregular behaviour of celery 【发布时间】:2020-07-15 13:48:26 【问题描述】:

我对 Celery 很陌生,我正在尝试使用它来安排一个功能,但它似乎无法正常工作。 这是我的settings.py:(以及django给出的默认设置)

CELERY_BROKER_URL = 'amqp://guest:guest@localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite'
CELERY_TASK_SERIALIZER = 'json'

celery.py:

rom __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mera_project.settings')

app = Celery('mera_project')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

init.py:

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

tasks_notes/tasks.py:(tasks_notes 是我的应用名称)

from celery.decorators import periodic_task
from celery.task.schedules import crontab
from tasks_notes.models import BudgetInfo

@periodic_task(run_every=(crontab(minute='*/15')))
def monthly_starting_value():
    print("hi")
    return 0

views.py:

from .tasks import monthly_starting_value
def app_view(request):
   abcd = monthly_starting_value.delay()
    print("new"+str(abcd))

我的终端中有期望值 zerohi,但我得到了一个随机数作为 new 42bf83ef-850f-4b34-af78 -da696d2ee0f2 并且随机数每15分钟不断变化。 在我的 ``celery beat``` 运行终端选项卡中,我得到了类似的东西:

WARNING/ForkPoolWorker-9] hi
Task tasks_notes.tasks.monthly_starting_value[42bf83ef-850f-4b34-af78-da696d2ee0f2] succeeded in 0.0009442089994990965s: 0

每 15 分钟一次。 我什至尝试过 ``app.beat.conf_scheduleincelery.py``` 并尝试在管理阶段运行,但它没有按预期工作。

我哪里错了?

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

它绝对不是不规则的——它的行为完全符合它应该的样子。 如果你想获取任务的结果,那么你应该有类似的东西:

abcd = monthly_starting_value.delay().get()

delay() 返回 AsyncResult 类的一个实例。

最后,不要在任务内部调用 print()。使用 Celery 记录器。

例子:

import os
from celery.utils.log import get_task_logger
from worker import app

logger = get_task_logger(__name__)

@app.task()
def add(x, y):
    result = x + y
    logger.info(f'Add: x + y = result')
    return result

【讨论】:

这次print(str(abcd)) 正在打印None,我已经从tasks.py 中删除了print 函数并返回变量var=6 的值。可能是什么问题?

以上是关于芹菜的不规则行为的主要内容,如果未能解决你的问题,请参考以下文章

如何修复mapreduce中mapper的setup方法给出的字符串值的不规则行为?

代码分析规则 CA1062 行为

5GS 协议栈 — PFCP 协议 — BAR 缓存行为规则

究竟什么是“假设”规则?

Firestore安全规则奇怪的行为

小对象堆栈存储、严格别名规则和未定义行为