2014-01-21 44 views
0

所以我有我稱之爲它發送另一個任務的任務電子郵件:芹菜異步任務只執行一次

@app.task(name='login.sync.register') 
def register(user_obj): 
    result = user_service.register(user_obj) 

    from .async import send_verification_email 
    send_verification_email.delay(result['user']['id']) 

    return result 

電子郵件發送任務是:

@app.task(name='login.async.send_verification_email', bind=True, max_retries=3) 
def send_verification_email(self, user_id): 
    try: 
     email_service.send_verification_email(user_id) 
    except Exception as exc: 
     raise self.retry(exc=exc) 

它完全適用於第一時間。電子郵件得到發送。當我第二次調用註冊任務時,它會成功,但send_verification_email不會被執行。我在日誌中沒有看到任何東西。

任何想法爲什麼?當我重新啓動芹菜工作人員時,它首次發送電子郵件,但之後停止發送電子郵件。

+0

你嘗試用user_id重寫註冊任務,就像在send_verification_email中,然後從db中加載它? – kobuz

回答

0

首先,我認爲像你一樣使用廣泛的異常處理程序是一個壞主意。除了例外,因爲exc會隱藏你的任何問題,你永遠不會知道 - 實際上發生了什麼。

您可以刪除異步調用,並使其同步後調試代碼:

send_verification_email(結果[ '用戶'] [ '身份證'])

我會解釋。您需要刪除所有.delay調用並直接調用您的任務。而且裏面send_verification_email()任務,你可以插入線

進口PDB; pdb.set_trace()

追蹤電話和觀看email_service.send_verification_email(USER_ID)的結果。

@app.task(name='login.async.send_verification_email', bind=True, max_retries=3) 
def send_verification_email(self, user_id): 
    import pdb;pdb.set_trace() 
    email_service.send_verification_email(user_id) 

此外,你可以用pudb替換pdb,這是友善的一點。你可以用'pip安裝pudb'來安裝它


我不能評論,因爲我剛剛註冊並沒有carma。

+0

雖然可能有用,但它讀取的評論多於答案... –