有没有简单的方法来判断等待Python GIL花了多少时间?

时间:2009-04-27 21:42:13

标签: python multithreading

我有一个长期运行的Python服务,我想知道等待GIL的任何可运行线程(即,由于某些其他原因未被阻止的线程)花费了多少累积挂钟时间。是否有捷径可寻?例如,也许我可以定期将一些计数器转储到其日志文件中。

我的基本动机是排除GIL作为这些长期运行过程中神秘响应延迟的来源。没有特别的理由怀疑GIL(除了它适合症状),但其他形式的日志还没有出现任何东西,所以,如果它很容易,它将是很高兴收到这些信息。

2 个答案:

答案 0 :(得分:3)

我认为没有一种简单的方法。可能有一种尴尬的方式,包括重建Python以遍历PyThreadState列表并在每次获取锁定时计算线程,但我怀疑它值得努力!

我知道这是一个推测性的问题但如果你甚至担心线程引起的延迟,那么转向多处理模型而不是多线程模型可能是谨慎的。由于Python中的流程既安全又可扩展,如果可行,它们几乎总是最佳选择。

答案 1 :(得分:0)

您现在可以使用gil_load来分析GIL使用情况。

请参阅my answer以查看其他问题。