我正在尝试连接到服务器。有时我无法连接到服务器,希望在再次尝试之前暂停几秒钟。如何在Python中实现暂停特性?这是我目前所知道的。谢谢你。
while True:
try:
response = urllib.request.urlopen(http)
except URLError as e:
continue
break
我使用Python 3.2
这将在继续之前阻塞线程2秒:
import time
time.sleep(2)
如果您想并行运行许多这些线程,那么使用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)