2017-12-16 105 views
6

Hiện nay tôi làm như sau để thiết lập một số lượng tối đa lần thử lại kết nối cho grequest wrapper của tôi:Có thể đặt số lần thử lại tối đa được chia sẻ giữa tất cả các kết nối trong cùng một phiên trong cùng một phiên không?

self._s = Session() 
retries = Retry(total=5, status_forcelist=[500, 502, 503, 504]) 
self._s.mount('http://, HTTPAdapter(max_retries=retries)) 

sau đó tôi tạo ra một loạt các grequest đối tượng với phiên self._s là một trong các đối số. Đối với exmaple, tạo ra một tập hợp các GET yêu cầu sẽ được thực hiện bằng một cái gì đó như thế này:

requests = [grequests.get(url, ..., 'session': self._s')]

Cuối cùng, đây là những bài cuối cùng phát hành sử dụng grequests.map(requests, ...).

Vấn đề là tôi muốn một cách để làm cho số lần thử lại tối đa vẫn tồn tại và được chia sẻ trên tất cả các kết nối của một nhóm kết nối. Việc thử lại dường như chỉ được áp dụng trên cơ sở kết nối riêng lẻ. Có cách nào để thực hiện điều này không? Điều này là không thể vì các đối tượng mới Retry() dường như được tạo ra theo mỗi lần giảm từ tổng số cuộc gọi?

Trả lời

0

Tôi nghĩ bạn đã hết may mắn. Tài liệu Retry docstring (trích đoạn):

Mỗi lần thử lại sẽ tạo một đối tượng Thử lại mới với giá trị cập nhật để có thể sử dụng lại an toàn.

Vì vậy, một đối tượng mới được tạo, như bạn đã nói, mọi kết nối ... và được thực hiện theo thiết kế.

Hơn nữa, đối tượng Retry chính nó là những gì cho phép luồng: nó ngủ giữa các lần thử kết nối. Vì vậy, một đối tượng Retryphải được liên kết với một sợi, theo thiết kế này. Lấy làm tiếc. Đây là một liên kết đến urllib.utils.retry trong trường hợp giúp.

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