【问题标题】:Get Celery task name from inside Django从 Django 中获取 Celery 任务名称
【发布时间】:2013-10-03 10:59:42
【问题描述】:

我有一个使用 Celery 3.0.23 和 RabbitMQ 3.1.5 的 Django 1.5.1 webapp。
reading the TaskMeta informations 从我的后端使用

from djcelery.models import TaskMeta
TaskMeta.objects.all()

我无法读取任务名称(通常是方法名称)。它不存储在数据库中。有没有办法存储任务名称或在运行时检索它?

如果没有,我已经在考虑将它存储在元属性中,但这意味着我必须在我创建的每个任务上手动调用 update_state。这对我来说有点笨拙。

【问题讨论】:

    标签: django celery djcelery


    【解决方案1】:

    您可以通过查看任务的name 属性来获取任务名称,例如:

    In [1]: from celery import task
    
    In [2]: @task
       ...: def hello():
       ...:     print hello.name
       ...:     
    
    In [3]: hello()
    default.hello
    
    In [4]: hello.name
    Out[4]: 'default.hello'
    

    如果您愿意,可以使用 celery.execute.send_task() 按名称调用该任务。

    UPD. 当您使用 RabbitMQ 作为代理时,Celery 使用celeryev 交换来发布任务的所有状态更新。 Django 不会有任何关于任务的信息,因为存储所有这些信息会对性能造成巨大影响。您可以使用命令连接到celeryev 交换:

    python manage.py celery events
    

    或者您可以flower 完成相同的任务。它们都将实时(不是历史记录)向您显示任务。您可以尝试使用SQL-database as broker,这将对您有所帮助。

    【讨论】:

    • 我想获取从数据库中获取的所有已执行任务的名称,而不是从任务文件中获取。我必须使用 Django 显示它们。
    • @AlessandroDaRugna,我是否理解正确:您想查看任务执行历史记录吗?或者你想列出所有可用的任务?
    • 我想读取任务执行历史并显示所有已执行任务及其名称
    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 2015-11-19
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2022-10-13
    相关资源
    最近更新 更多