2010-08-06 81 views

回答

1

如果我正确理解Twisted Reactors,它们不会并行化所有内容。无论排队的操作是什么,都要一一完成。

你的一个出路是自定义addCallback,它会检查已经注册了多少个回调,并在必要时删除。

1

我会处理这每协议。当实际的服务需要时,进行节流,而不是当你认为会。我不担心有多少回调函数等待反应堆计时器,我会担心HTTP请求(例如)需要多长时间才能完成。等待反应堆的操作的数量可能是一个实现细节 - 例如,如果一个访问模式以长DeferredLists的回调结束,另一个具有更多线性的回调链,则响应时间可能不会不同,即使回调的数量是。

这可以通过保持完成逻辑操作的时间度量(例如服务HTTP请求)来完成。这样做的一个优点是它可以在问题发生之前为您提供重要信息。

+0

是的,我过去做过的一种方法是检查响应时间(例如http请求)并在新增连接数增加太多时丢弃新连接。但是这并不完美,因为在我们检测到这种情况的时候,已经有数以千计的延期已经堆积起来,所有这些都必须进行处理,从而使反应堆变得更加缓慢。 – Tommy 2010-08-10 07:01:37

+0

当然,如果您想要优雅地降低服务质量,请在您的服务器过于疲惫地做出响应之前做到这一点。我的意见是,等待回调的数量不是你想要监控的,我会监视其他资源(SQL查询时间,内存,负载,磁盘?),但我仍然会优先考虑请求时间。 Twisted应该能够轻松有效地拒绝您的请求时间过长 - 只记录未完成请求的数量及其开始时间。或者,在代理中执行此操作,以便您根本不必担心无响应的服务器。 – 2010-08-11 23:32:13