2013-02-25 67 views
0

我有一個django芹菜視圖,它執行某些任務,並在任務完成後成功將其寫入數據庫。result.ready()在django芹菜中無法正常工作?

我這樣做:

result = file.delay(password, source12, destination) 

而且,

if result.successful() is True: 
     #writes into database 

但是任務已完成執行後不進入,如果condition.I試圖用result.ready()但沒有運氣。

編輯:上述線路都在同樣的觀點:

def sync(request): 
    """Sync the files into the server with the progress bar""" 
    choice = request.POST.getlist('choice_transfer') 
    for i in choice: 
     source12 = source + '/' + i 
     start_date1 = datetime.datetime.utcnow().replace(tzinfo=utc) 
     start_date = start_date1.strftime("%B %d, %Y, %H:%M%p") 

     basename = os.path.basename(source12) #Get file_name 
     extension = basename.split('.')[1] #Get the file_extension 
     fullname = os.path.join(destination, i) #Get the file_full_size to calculate size 

     result = file.delay(password, source12, destination) 

     if result.successful() is True: 
      #Write into database 

E: #Writes數據庫

+0

在哪裏這兩條線生活在關係到彼此? – 2013-02-25 08:52:16

+0

他們都屬於同一觀點。 – pynovice 2013-02-25 08:54:10

回答

1
  1. 當你調用file.delay,芹菜進行排隊任務運行在後臺,在稍後的一點。

  2. 如果您立即檢查result.successful(),它將是錯誤的,因爲任務尚未運行。

如果需要鏈的任務(一個接一個燒製)使用芹菜的工作流程解決方案(在這種情況下chain):

def do_this(password, source12, destination): 
    chain = file.s(password, source12, destination) | save_to_database.s() 
    chain() 


@celery.task() 
def file(password, source12, destination): 
    foo = password 
    return foo 


@celery.task() 
def save_to_database(foo): 
    Foo.objects.create(result=foo) 
+0

所以我想要做的是:任務完成後,我想寫入一些信息到數據庫中。我怎樣才能做到這一點? – pynovice 2013-02-25 08:56:50

+0

將代碼直接添加到將信息寫入數據庫的任務,或直接調用任務,並阻塞直到完成。 – 2013-02-25 08:58:57

+0

第一個我做到了!但我不想將排隊的任務顯示給用戶。如果我想用第二個,我永遠不會去django芹菜。 – pynovice 2013-02-25 09:01:11