2013-09-05 39 views
7

Đang cố gắng tìm một cách tốt để nắm bắt thời gian chờ của một công việc RQ, vì vậy nó có thể được requeued sau khi hết thời gian chờ.Làm cách nào để nắm bắt và xử lý đúng thời gian chờ RQ bằng Python?

Về cơ bản, giải pháp chính xác sẽ cung cấp một cách (ví dụ, một trình xử lý ngoại lệ trong công nhân hoặc thứ gì đó sắp xếp) để thực hiện công việc đã hết thời gian chờ. Ngoài ra, nếu công việc quay trở lại hàng đợi failed, đó cũng là một câu trả lời hay.

Cảm ơn rất nhiều! Bất kỳ trợ giúp sẽ được đánh giá cao!

Trả lời

3

Có vẻ như bạn muốn sử dụng exception handling. Từ tài liệu:

Công việc có thể không thành công do ngoại lệ xảy ra. Khi nhân viên RQ của bạn chạy ở nền, làm thế nào để bạn nhận được thông báo về những trường hợp ngoại lệ này?

Mặc định: hàng đợi không thành công Mạng an toàn mặc định cho RQ là hàng đợi không thành công. Mọi công việc không thực hiện được lưu trữ tại đây, cùng với thông tin ngoại lệ của nó (loại, giá trị, truy nguyên). Trong khi điều này làm cho chắc chắn không có công việc thất bại "bị lạc", điều này là không sử dụng để được thông báo chủ động về thất bại công việc.

Trình xử lý ngoại lệ tùy chỉnh Bắt đầu từ phiên bản 0.3.1, RQ hỗ trợ đăng ký trình xử lý ngoại lệ tùy chỉnh. Điều này làm cho nó có thể thay thế hành vi mặc định (gửi công việc đến hàng đợi không thành công) hoàn toàn hoặc thực hiện các bước bổ sung khi có ngoại lệ.

Bạn cũng có thể lưu trữ các công việc trong một redis sắp xếp thiết lập với job_id như chìa khóa và time.time() + timeout như điểm số, và sau đó có một nhân viên chạy ZRANGEBYSCORE sorted_set 0 [current_time] và xử lý bất cứ điều gì ấy trở lại như một công việc theo thời gian-out.

+2

Cảm ơn! Chính xác. Để tham khảo trong tương lai, công việc đưa ra một 'JobTimeoutException' có thể được xử lý bởi trình xử lý ngoại lệ của công nhân, tuy nhiên bạn chọn để xác định nó. –

Các vấn đề liên quan