有没有简单的方法来判断等待Python GIL的时间?
我有一个运行很久的Python服务,我想知道在这些可以运行的线程(也就是没有因为其他原因被阻塞的线程)中,有多少时间是花在等待全局解释器锁(GIL)上的。有没有简单的方法可以做到这一点?比如,我可以定期把一些计数器的信息记录到日志文件里。
我这样做的主要原因是想排除GIL是否是导致这些长时间运行的进程响应延迟的原因。其实并没有特别的理由怀疑GIL(只是它的表现和症状有点像),不过其他的日志记录方式到现在为止没有发现任何问题,所以,如果这很简单的话,能得到这些信息就太好了。
3 个回答
2
现在你可以使用 gil_load 来分析 GIL 的使用情况了。
可以查看 我对另一个问题的回答。
3
我觉得没有简单的方法。可能有一种比较麻烦的方法,就是重建Python,让它在每次获取锁的时候遍历PyThreadState列表,数一下线程的数量,但我觉得这样做不太值得!
我知道这个问题有点猜测的成分,但如果你对线程可能造成的延迟有点担心,考虑换成多进程模型可能更明智。因为在Python中,进程更安全,也更容易扩展,通常来说,如果可行的话,选择进程几乎总是最好的选择。