在Python中重试连接之前暂停



我正在尝试连接到服务器。有时我无法连接到服务器,希望在再次尝试之前暂停几秒钟。如何在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)

相关内容

  • 没有找到相关文章

最新更新