2016-08-10 22 views
1

當用瓶的應用程序集成芹菜,我有一個需要回調,當任務完成後加入到燒瓶我怎樣才能使芹菜任務調用回它完成時

@celery_app.task(bind=True) 
def doSth(self): 
    rv = long_time_job() 
    return rv 

@task_success.connect(sender=doSth) 
def on_add_success(sender, result, **kwargs): 
    #tell flask that a task has been done 
    pass 

而是一個長期的任務,燒瓶我不知道

回答

1

celery任務是通過工作人員從Flask服務器獨立運行的,它們是與消息代理(rabbitmq?)通信的兩個不同進程。所以,當任務結束時,應該在考慮前者的情況下完成該回調函數,這是兩個不同的過程。

在這裏,我給你兩個解決方案:

  • 網絡掛接:定義在燒瓶中服務器的HTTP URL,並在任務,以便瓶知道年底做的任務ID的GET。
  • 數據庫:使用線程安全的數據庫並保持任務的狀態。 Flask永遠不會知道任務在查詢數據庫(即輪詢)之前結束,而不是實時的,但仍然是一個選項。
+0

webhook也許是最好的嘗試 – bin381

相關問題