为芹菜写一个基本任务,可以知道工人是否起床了

2024-04-27 02:33:53 发布

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

我正在尝试编写一个基本任务类,它将在执行某些操作之前检查工作人员的可用性。 通过阅读this文章,我得出以下结论:

class BaseTask(Task):
    def apply_async(self, *args, **kwargs):
        if not celery.control.inspect().stats():
            raise Exception("workersDown")
        Task.apply_async(self, *args, **kwargs)

然而,这似乎只是第一次。 我知道a task is not instantiated each time,但它是相关联的吗? 有没有其他方法可以达到我想要的?在

编辑:

我发现将基本任务设置为抽象任务有帮助,但仍会产生一些误报(有时,虽然工作人员已起床,但仍会引发异常):

^{pr2}$

Tags: selftaskasyncdef文章notargsthis
1条回答
网友
1楼 · 发布于 2024-04-27 02:33:53

对于给定的celery应用实例,只能调用inspect()一次。下面是您可以在任务中使用的小代码段:

from celery import Celery

def inspect(method):
    app = Celery('app', broker='amqp://')
    return getattr(app.control.inspect(), method)()


class BaseTask(Task):
    def apply_async(self, *args, **kwargs):
        if not inspect('stats'):
            raise Exception("workersDown")
        Task.apply_async(self, *args, **kwargs)

相关问题 更多 >