簡體   English   中英

Celery任務一直認為Django模型實例是一個整數對象

[英]Celery task keeps thinking Django model instance is an integer object

我對此完全感到困惑,但是也許另一雙眼睛會有所幫助。

我正在將模型的primary_key傳遞到通過my_task.delay(args)啟動的Celery任務中。 這是任務中的代碼:

from my_project.my_app.models import *

@task()
def mytask(arg1, arg2, primary_key):
    m = Machine.objects.get(pk=primary_key)

    if m.last_os:
        last_ver = m.last_os.split('_')[1]
    else:
        last_ver = 'None'

芹菜很生氣,我什至會嘗試這樣做並吐出這個錯誤:

Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/celery/app/trace.py", line 238, in trace_task
R = retval = fun(*args, **kwargs)
File "/Library/Python/2.7/site-packages/celery/app/trace.py", line 416, in  __protected_call__
return self.run(*args, **kwargs)
File "/Users/me/Documents/python/my_project/my_project/my_app/tasks.py", line 33, in my_task
@task()
AttributeError: 'int' object has no attribute 'last_os'

我驗證傳遞給該函數的pk確實是一個int(其值為1,我正在使用django的默認pk分配)。

還要注意的另一件事是,如果我自己傳遞Model實例,那么一切都會如願以償-我只是不希望在Celery任務中出現過時的模型對象。

任何幫助表示贊賞。

編輯:我也嘗試過將pk硬編碼到Machine.objects.get(pk=1)調用中,它仍然認為它是整數,而我在shell中得到了一個非常好的Machine實例。

事實證明,當您在Celery服務運行時編輯任務時,這些更改不會反映在正在運行的Celery服務上。 因此,無論何時更改celery任務的代碼,都需要重新啟動Celery服務。

令人遺憾的是,入門指南從未明確指出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM