Celery 倒计时错误

2 投票
1 回答
1142 浏览
提问于 2025-04-17 19:05

我正在尝试给一个任务添加倒计时,但一直没有成功。

这是我正在使用的代码:

@celery.task
def check_st(key, t):
    device = Device.query.filter(Device.key == key).first()
    data = Data.query.filter(Data.dev_id == device.id).order_by(Data.timestamp.desc()).first()
    if(data.timestamp == t):
        return True

我这样调用它:

check_st.apply_async([key, data.timestamp], countdown=300)

以上内容摘自完整的 celery 日志

有没有什么想法?

编辑

我测试了一个简单的倒计时示例,似乎运行得很好。我想可能是我的项目结构导致了问题,加上我运行 celery 的方式。

我的项目结构是这样的:

proj(app(__init__.py, views.py, models.py, tasks.py))

在我的 tasks.py 中,我这样导入模块:

from app.models import Device, Data

然后在我的 views.py 中,我用以下方式导入任务:

from app.tasks import check_st

我在 proj/ 目录下这样运行 celery:

celery -A app.tasks worker -l info

在这个设置下,其他所有任务都按预期工作,但当我添加倒计时关键字时,我得到了以下结果:

Task app.tasks.check_st[deffd607-c6d4-41af-882c-e111736888ba] raised exception: TypeError("check_st() got an unexpected keyword argument 'countdown'",)

1 个回答

1

问题终于解决了。解决办法是把

celery -A app.tasks worker -l info

改成

celery --workdir=proj/ -A app.tasks worker -l info

撰写回答