Twisted Python暂停/延迟

2024-09-30 03:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我对twisted很陌生,我有一个HTTP客户端,它查询有速率限制的服务器,当我达到这个限制时,服务器会用HTTP 204响应,所以当我处理响应时,我可能会做一些很糟糕的事情,比如:

def handleResponse(r, ip):
if r.code == 204:
    print 'Got 204, sleeping'
    time.sleep(120)
    return None
else:
    jsonmap[ip] = ''
    whenFinished = twisted.internet.defer.Deferred()
    r.deliverBody(PrinterClient(whenFinished, ip))
    return whenFinished

我这么做是因为我想暂停所有的任务。

下面是我脑海中的两个行为,要么在同一个执行中重新运行之后达到204的任务(不知道是否可能),要么记录错误,然后在程序的另一个执行中重新运行它们。另一个可能引起的问题是,我在连接上设置了一个超时,以便在服务器没有响应的情况下,在预定义的时间段(参见下面的代码)后取消延迟的连接

^{pr2}$

我可能遇到的另一个问题是,如果我在睡觉,我可能会超时,我所有的请求都将被取消。

我希望我已经足够精确了。 提前谢谢你。

杰波


Tags: ip服务器http客户端returnif速率def
1条回答
网友
1楼 · 发布于 2024-09-30 03:23:42

不要在任何基于Twisted的代码中使用time.sleep(20)。这违反了您可能使用的任何其他基于Twisted的代码的基本假设。在

相反,如果想延迟某件事N秒,请使用reactor.callLater(N, someFunction)。在

一旦您从程序中删除了sleep调用,那么仅仅因为您停止了reactor处理事件而发生的无关超时问题就会消失。在

相关问题 更多 >

    热门问题