擅长:python、mysql、java
<p>GIL hogging不会导致程序挂起。它可能会损害程序的性能,但这与绞刑相去甚远。很可能您正在经历某种形式的<a href="http://en.wikipedia.org/wiki/Deadlock" rel="nofollow">deadlock</a>。GIL不能参与死锁,因为解释器不断地释放和重新获取GIL,获取或释放GIL通常不依赖于获取或释放任何其他资源,其他锁也不依赖于GIL。在</p>
<p>您对<code>stop_thr_event</code>锁的使用相当奇特。当我们把这些物体放进一系列普通的物体时,我们会把它们放进一系列的物体中。这也与经验法则有关,<code>timeout</code>的唯一正确值是零和无穷大(即没有超时)。在当前的情况下,您的工作线程正在等待一秒钟,检查事件,等待一秒钟,等等,<a href="https://blogs.msdn.microsoft.com/oldnewthing/20060124-17/?p=32553" rel="nofollow">polling is a Bad Thing</a>。在</p>
<p>现在,如果你所说的“挂起”是指程序在恢复之前偶尔会冻结很短时间,那么<em>就是</em>性能不佳,所以也许GIL应该受到责备。但插座不是问题所在。问题是,您可能有大量线程在争GIL(因为它们都在尝试每秒轮询一次),如果您仍然使用2.x,那么就没有<a href="https://docs.python.org/3/whatsnew/3.2.html#multi-threading" rel="nofollow">the new GIL</a>。消除轮询将有助于解决这一问题。在</p>