このような(Webページに接続する)場合は、接続を試行する回数ではなく、時間に基づいて上限を設定する方がよい場合があります。だからではなく、while
ループを使用します。
import numpy as np
import time
def main():
np.load('file.csv')
start = time.time()
stop = start + 5
attempts = 0
result = 'failed'
while True:
if time.time()<stop:
try:
main()
except Exception as e:
attempts += 1
print e
time.sleep(0.1) # optional
print 'Restarting!'
continue
else:
result = 'succeeded'
print 'Connection %s after %i attempts.' % (result, attempts)
break
オプション:各試行が失敗した後、私は100ミリ秒のポーズが含まれています。これは時折接続を確立するのに役立ちます。その後
あなたが他のプロジェクトのために、将来的に使用できる機能にアップ全体を包む:
import numpy as np
from retry import retry
def main():
np.load('file.csv')
retry(main, 5, 0.1)
試験方法:
class RetryTest():
def __init__(self, succeed_on = 0, excp = Exception()):
self.succeed_on = succeed_on
self.attempts = 0
self.excp = excp
def __call__(self):
self.attempts += 1
if self.succeed_on == self.attempts:
self.attempts = 0
else:
raise self.excp
retry_test1 = RetryTest(3)
retry(retry_test1, 5, 0.1)
# succeeded after 3 attempts.
retry_test2 = RetryTest()
retry(retry_test2, 5, 0.1)
# failed after 50 attempts.
# retry.py
import time
def retry(f, seconds, pause = 0):
start = time.time()
stop = start + seconds
attempts = 0
result = 'failed'
while True:
if time.time()<stop:
try:
f()
except Exception as e:
attempts += 1
print e
time.sleep(pause)
print 'Restarting!'
continue
else:
result = 'succeeded'
print '%s after %i attempts.' % (result, attempts)
break
は今、ちょうどこの操作を行います
良好なコード – auryndb
を助けます。今すぐ修正。 –