Các lựa chọn thay thế cho retrying
: tenacity
và backoff
(cập nhật 2020)
Các thử lại thư viện trước đây là con đường để đi, nhưng đáng tiếc nó có một số lỗi và nó đã không có bất kỳ bản cập nhật kể từ năm 2016. lựa chọn thay thế khác dường như là backoff và kiên trì . Trong thời gian viết bài này, độ bền có nhiều sao GItHub hơn (2,3k so với 1,2k) và được cập nhật gần đây hơn, do đó tôi đã chọn sử dụng nó. Đây là một ví dụ:
from functools import partial
import random # producing random errors for this example
from tenacity import retry, stop_after_delay, wait_fixed, retry_if_exception_type
# Custom error type for this example
class CommunicationError(Exception):
pass
# Define shorthand decorator for the used settings.
retry_on_communication_error = partial(
retry,
stop=stop_after_delay(10), # max. 10 seconds wait.
wait=wait_fixed(0.4), # wait 400ms
retry=retry_if_exception_type(CommunicationError),
)()
@retry_on_communication_error
def do_something_unreliable(i):
if random.randint(1, 5) == 3:
print('Run#', i, 'Error occured. Retrying.')
raise CommunicationError()
Đoạn mã trên xuất ra một cái gì đó như:
Run# 3 Error occured. Retrying.
Run# 5 Error occured. Retrying.
Run# 6 Error occured. Retrying.
Run# 6 Error occured. Retrying.
Run# 10 Error occured. Retrying.
.
.
.
Thêm cài đặt cho tenacity.retry
được liệt kê trên trang GitHub độ bền .
range(100)
mà không cần tham số đầu tiên. Nếu bạn sử dụng Python 2.x, bạn thậm chí có thể sử dụngxrange(100)
, điều này sẽ tạo ra một trình vòng lặp và sử dụng ít bộ nhớ hơn. (Không phải là vấn đề chỉ với 100 đối tượng.)