繁体   English   中英

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

[英]Is there an easy way to tell how much time is spent waiting for the Python GIL?

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

我的潜在动机是排除GIL作为这些长期运行过程中神秘响应延迟的来源。 没有特别的理由怀疑GIL(除了它适合症状),但其他形式的日志记录还没有发现任何东西,因此, 如果它很容易 ,那么拥有这些信息会很好。

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

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

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

请参阅对其他问题的回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM