我們在使用我們的WSGI應用程序時使用了RQ。我們所做的是在運行這些任務的不同後端服務器上有幾個不同的進程,連接到(可能)幾個不同的任務服務器。爲了更好地配置此設置,我們在我們的系統中使用了一個自定義管理層,負責管理運行工作人員,設置任務隊列等。重試RQ中的失敗作業
當作業失敗時,我們想要執行重試,一個工作會延長几次,最終要麼完成它,要麼讓它失敗並在我們的日誌系統中記錄一個錯誤條目。但是,我不確定應該如何實施。我已經創建了一個自定義的工人腳本,可以讓我們記錄錯誤到我們的數據庫,和我在重試第一次嘗試是沿着這一線的東西:
# This handler would ideally wait some time, then requeue the job.
def worker_retry_handler(job, exc_type, exc_value, tb):
print 'Doing retry handler.'
current_retry = job.meta[attr.retry] or 2
if current_retry >= 129600:
log_error_message('Job catastrophic failure.', ...)
else:
current_retry *= 2
log_retry_notification(current_retry)
job.meta[attr.retry] = current_retry
job.save()
time.sleep(current_retry)
job.perform()
return False
正如我所說,我們也有在一個函數worker文件,它可以正確解析它應該連接的服務器,並且可以發佈作業。問題不一定是如何發佈作業,但做什麼與您在異常處理程序中獲取的作業實例。
任何幫助將不勝感激。如果有更好的方法可以做到這一點,那麼建議或指導也會很棒。謝謝!
對不起,我不熟悉RQ - 你能提供一個鏈接到圖書館嗎? – necaris
我猜你的意思是http://python-rq.org/吧? – Borys