我正在尝试连接到服务器。有时我无法到达服务器并想再次尝试之前暂停几秒钟。我如何在Python中实现暂停功能。这是我到目前为止所拥有的。谢谢。
while True:
try:
response = urllib.request.urlopen(http)
except URLError as e:
continue
break
我正在使用Python 3.2
答案 0 :(得分:7)
这将阻止线程持续2秒,然后继续:
import time
time.sleep(2)
答案 1 :(得分:3)
如果你想并行运行大量这些,那么使用Twisted这样的异步网络框架会更具可扩展性,其中“休眠”并不意味着阻止有价值且昂贵的OS线程从做一些其他有用的工作。下面是如何根据需要并行尝试多个请求(设置为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)