标签: python multithreading
我有一个长期运行的Python服务,我想知道等待GIL的任何可运行线程(即,由于某些其他原因未被阻止的线程)花费了多少累积挂钟时间。是否有捷径可寻?例如,也许我可以定期将一些计数器转储到其日志文件中。
我的基本动机是排除GIL作为这些长期运行过程中神秘响应延迟的来源。没有特别的理由怀疑GIL(除了它适合症状),但其他形式的日志还没有出现任何东西,所以,如果它很容易,它将是很高兴收到这些信息。
答案 0 :(得分:3)
我认为没有一种简单的方法。可能有一种尴尬的方式,包括重建Python以遍历PyThreadState列表并在每次获取锁定时计算线程,但我怀疑它值得努力!
我知道这是一个推测性的问题但如果你甚至担心线程引起的延迟,那么转向多处理模型而不是多线程模型可能是谨慎的。由于Python中的流程既安全又可扩展,如果可行,它们几乎总是最佳选择。
答案 1 :(得分:0)
您现在可以使用gil_load来分析GIL使用情况。
请参阅my answer以查看其他问题。