在Python中重试连接前暂停
我正在尝试连接到一个服务器。有时候我无法连接上这个服务器,我想在再试一次之前暂停几秒钟。请问我该如何在Python中实现这个暂停功能呢?这是我目前的代码。谢谢。
while True:
try:
response = urllib.request.urlopen(http)
except URLError as e:
continue
break
我使用的是Python 3.2
2 个回答
4
如果你想同时运行很多这样的任务,使用一个异步网络框架会更好,比如Twisted。这样“休眠”就不会占用一个宝贵的操作系统线程去做其他有用的工作。下面是一个大致的示例,展示了你可以同时尝试尽可能多的请求(这里设置为100),并且可以设置超时时间(5秒)、延迟时间(2秒)以及可配置的重试次数(这里是10次)。
from twisted.internet import defer, reactor
from twisted.web import client
# A semaphore lets you run up to `token` deferred operations in parallel
semaphore = defer.DeferredSemaphore(tokens=100)
def job(url, tries=1, d=None):
if not d:
d = defer.succeed(None)
d.addCallback(lambda ignored: client.getPage(url, timeout=5))
d.addCallback(doSomethingWithData)
def retry(failure):
if tries > 10:
return failure # give up
else:
# try again in 2 seconds
d = defer.succeed(None)
reactor.callLater(2, job, url, tries=tries+1, d=d)
return d
d.addErrback(retry)
return d
for url in manyURLs:
semaphore.run(job, url)
7
这段代码会让程序暂停2秒钟,然后再继续执行:
import time
time.sleep(2)