2013-10-03 26 views
2

我有一個Django 1.5.1 webapp使用Celery 3.0.23和RabbitMQ 3.1.5。
reading the TaskMeta informations從我的後端使用從Django裏面獲取芹菜任務名稱

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

我無法讀取任務名稱(它通常是方法名)。它不存儲在數據庫中。有沒有辦法存儲任務名稱或在運行時檢索它?

如果不是,我已經在考慮將其存儲在元屬性中,但這意味着我手動必須在創建的每個任務上調用update_state。這對我來說看起來有點笨拙。

回答

0

你可以得到你的任務名稱,通過觀察任務的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,方式是這會幫助你。

+0

我想獲取已從數據庫中獲取的所有已執行任務的名稱,而不是從任務文件中獲取。我必須使用Django來顯示它們。 –

+0

@AlessandroDaRugna,我理解你是否正確:你想看到任務執行歷史?或者你想列出所有可用的任務? –

+0

我想要讀取任務執行歷史並顯示所有已執行的任務及其名稱 –