Celery检查队列是否正在执行

Vad*_*huk 2 python multithreading celery django-celery

我必须产生芹菜任务,它必须有一些命名空间(例如用户ID).所以我产生了它

scrapper_start.apply_async((request.user.id,), queue=account.Account_username)
app.control.add_consumer(account.Account_username, reply=True)
Run Code Online (Sandbox Code Playgroud)

并且任务从其他任务递归地产生.现在我必须检查队列的任务是否正在执行.试图检查redis中的列表长度,它在celery开始执行之前返回真实数字.如何解决这个问题呢.我只需要检查,如果队列或消费者正在执行或已经为空.谢谢

Chi*_*and 5

如果您只想检查队列,可以从命令行本身执行此操作.

 from celery.task.control import inspect
 i = inspect('scrapper_start')
 i.active()  #  get a list of active tasks
Run Code Online (Sandbox Code Playgroud)

除了检查当前正在执行的内容之外,您还可以执行以下操作.

 i.registered() # get a list of tasks registered
 i.scheduled # get a list of tasks waiting
 i.reserved() #tasks that has been received, but waiting to be executed
Run Code Online (Sandbox Code Playgroud)

如果您想偶尔检查一次,那么此命令行检查很好.

出于某种原因,如果你想连续监控它们,你可以使用Flower,它提供了一个漂亮的界面来监控工人. 在此输入图像描述

  • 对我来说不起作用,`i = inform('my_queue')`然后`i.ping()`给了我`ValueError:目的地必须是列表/元组而不是<class 'str'>`这个错误@ChillarAnand (2认同)