如何确定适当的检查间隔?

时间:2010-08-24 17:55:32

标签: python multithreading tornado gil

我刚刚开始处理有一些CPU问题的龙卷风应用程序。随着时间的推移,CPU时间将单调增长,最大化CPU为100%。该系统目前设计为不阻止主线程。如果需要执行阻塞和异步驱动程序不可用的操作,它将生成另一个线程来执行阻塞操作。

因此,我们的主线程几乎完全是CPU绑定的,还有一堆其他线程几乎完全是IO绑定的。从我读过的内容来看,这似乎是解决GIL问题的最佳方式。另外,我的分析显示我们花了很多时间等待信号(我假设是__semwait_signal正在做的事情),这与GIL在我有限的理解中会产生的影响一致。 / p>

如果我使用sys.setcheckinterval将检查间隔设置为300,则CPU增长会显着减慢。我想要确定的是我是否应该增加检查间隔,将其保持在300,或者是否应该加大检查间隔。毕竟,我注意到CPU性能变得更好,但我有点担心这会对系统的响应性产生负面影响。

当然,正确的答案可能是我们需要重新考虑我们的架构以考虑GIL。但这不是可以立即完成的事情。那么我该如何确定短期内采取的适当行动?

1 个答案:

答案 0 :(得分:1)

我要检查的第一件事是确保你正确退出线程。很难用你的描述来弄清楚发生了什么,但你使用“单调”这个词,这意味着CPU的使用与时间有关而不是加载。

您可能正在遇到Python的线程限制,但它应该随着负载(活动线程数)而变化,并且CPU使用率(上下文切换成本)应该随着这些线程的退出而减少。一旦创建了一个线程,是否有某种理由永远存在?如果是这种情况,请优先考虑重新架构。否则,短期内将弄清楚为什么CPU使用率与时间和无负载有关。这意味着每个新线程在您的系统中都有永久的,不可逆转的成本 - 这意味着它永远不会退出。