Chúng tôi đang sử dụng RQ bằng ứng dụng WSGI của chúng tôi. Những gì chúng tôi làm là có nhiều quy trình khác nhau trong các máy chủ back-end khác nhau chạy các tác vụ, kết nối với (có thể) một số máy chủ tác vụ khác nhau. Để cấu hình tốt hơn thiết lập này, chúng tôi đang sử dụng một lớp quản lý tùy chỉnh trong hệ thống của chúng tôi, quản lý các công việc đang chạy, thiết lập hàng đợi công việc, v.v.Thử lại các công việc thất bại trong RQ
Khi công việc thất bại, chúng tôi muốn thực hiện thử lại một công việc nhiều lần sau một sự chậm trễ gia tăng, và cuối cùng hoặc hoàn thành nó hoặc có nó thất bại và đăng nhập một mục nhập lỗi trong hệ thống khai thác gỗ của chúng tôi. Tuy nhiên, tôi không chắc làm thế nào điều này nên được thực hiện. Tôi đã tạo ra một kịch bản lao động tùy chỉnh cho phép chúng tôi để đăng nhập lỗi cơ sở dữ liệu của chúng tôi, và nỗ lực đầu tiên của tôi tại retry là một cái gì đó dọc theo dòng này:
# 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
Như tôi đã đề cập, chúng tôi cũng có một chức năng trong tệp công nhân xử lý chính xác máy chủ mà nó sẽ kết nối và có thể đăng công việc. Vấn đề không nhất thiết phải là cách xuất bản một công việc, nhưng phải làm gì với trường hợp công việc mà bạn nhận được trong trình xử lý ngoại lệ.
Mọi trợ giúp sẽ được đánh giá cao. Nếu có gợi ý hay gợi ý về cách tốt hơn để làm điều này cũng sẽ rất tuyệt. Cảm ơn!
Tôi rất tiếc, tôi không quen với RQ - bạn có thể cung cấp liên kết tới thư viện không? – necaris
Tôi đoán bạn có nghĩa là http://python-rq.org/ phải không? – Borys