2014-02-28 26 views
1

我想擴展djcelery taskmeta表,例如我有一個計劃任務返回一個整數值。擴展djcelery taskmeta表

我想添加一個字段來存儲此值,以便我可以將此數據與taskmeta表中的date_done字段一起繪製。

我試圖創建一個新的模型,並與taskmeta表做一個foreignkey關係,在我的任務裏面,在這個新表的基礎上在task_id的基礎上添加一行。

但我猜,同時執行任務,我不能做,因爲我承擔taskmeta數據尚未保存在這一點上,即:

if mover.request.id: 
    try: 
     task = TaskMeta.objects.get(task_id=mover.request.id) 
        extend_task_info = TaskExtended(task=task) 
        extend_task_info.save() 
    except ObjectDoesNotExist: 
     logger.error('Task ID: %s not in the DB' % mover.request.id) 

的任務代碼增加:

@task() 
def mover(): 
    for root, dirs, files in os.walk(src_dir): 
     path = root.split('/') 
     for file in files: 
      counter = process_file(os.path.join(root, file)) 

    if mover.request.id: 
     try: 
      tn = TaskMeta.objects.get(task_id=mover.request.id) 
      extend_task_info = TaskExtended(task=task) 
      extend_task_info.counter = counter 
      extend_task_info.save() 
     except ObjectDoesNotExist: 
      logger.error('Task ID: %s not in the DB' % mover.request.id) 
+0

您是否收到任何錯誤? – Drewness

+0

是異常提出,任務ID:eb381eda-6f2e-4c2c-8731-f290c02e4d2d不在數據庫 –

回答

1

使用task.AsyncResult(task_id)。您可以在文檔here中閱讀更多內容。

+0

對不起,我不完全明白。這將返回一個AsyncResult,不是嗎?這將如何幫助我將擴展信息保存到taskmeta表中或在我處於任務中時擴展到另一個表中?你會詳細說明嗎?謝謝。 –

+0

@JoeLones - 當然。使用'.AsyncResult()'可以讓你在任務運行時訪問它。在你的情況下,這很好,因爲你試圖在它存在或未完成之前擴展它,因此出現'ObjectDoesNotExist'異常。 – Drewness

+0

我修改了我的操作並添加了我的任務代碼,但仍然不確定我是否掌握了它。在上面的代碼中,異常總是不會觸發。一旦任務結束,taskmeta數據不會保存嗎? –