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

Jac*_*son 6 python multithreading

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

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

Kyl*_*tan 3

我认为没有简单的方法。可能有一种尴尬的方法,涉及重建 Python 来遍历 PyThreadState 列表并在每次获取锁时对线程进行计数,但我怀疑这是否值得!

我知道这是一个推测性问题,但如果您稍微担心线程导致的延迟,那么转向多处理模型而不是多线程模型可能是明智的。由于 Python 中的流程更安全且更具可扩展性,因此如果实用,它们几乎总是最佳选择。