2 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
您沒(méi)有非常具體地說(shuō)明超時(shí)和重試次數(shù),或者成功的條件...但是,為簡(jiǎn)單起見(jiàn),假設(shè)您希望重試最多 5 次,重試間隔為 1,并且您希望繼續(xù)執(zhí)行 500(或 5xx)以外的錯(cuò)誤代碼。
然后你可以使用類(lèi)似的東西:
import time
def sequence_of_requests(arg1, arg2):
yield request_a(arg1)
yield request_b(arg1, arg2)
for retries in range(5):
result = request_c(arg1, arg2)
if result.status_code < 500:
break
time.sleep(1)
yield result
如果達(dá)到最大重試次數(shù),則只需返回上次收到的響應(yīng)。如果獲得有效的響應(yīng),則脫離循環(huán)并返回良好的響應(yīng)。
有一個(gè)小的低效率,因?yàn)槿绻氵_(dá)到重試總數(shù),你仍然會(huì)睡1秒,然后再返回值。您可以通過(guò)顯式管理變量并檢查循環(huán)中的限制來(lái)解決此問(wèn)題。但是,對(duì)于如何管理放棄,您可能還有其他想法(例如,超時(shí),而不是固定次數(shù)的重試),因此您應(yīng)該調(diào)整該部分代碼以遵循對(duì)您有意義的邏輯。retries

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以生成函數(shù),而不是生成響應(yīng)值本身,然后可以重復(fù)調(diào)用這些函數(shù)。函數(shù)的參數(shù)可以使用 應(yīng)用。functools.partial
from functools import partial
def sequence_of_requests(arg1, arg2):
yield partial(request_a, arg1)
yield partial(request_b, arg1, arg2)
yield partial(request_c, arg1, arg2)
現(xiàn)在可以測(cè)試這些步驟:
generator_functions = sequence_of_requests()
r = next(generator_functions)()
assert r.status_code == 200
r = next(generator_functions)()
assert r.status_code == 204
# Repeatedly make the request until the expected status code is returned.
func_slow_request = next(generator_functions)
wait_for_status(404)(func_slow_request)
添加回答
舉報(bào)