Skip to main content
 首页 » 编程设计

python之死锁主线程而不是忙等待更好吗

2024年09月03日35shanyou

我有一个主线程启动多个守护线程来监听文件系统事件。 我需要让主线程保持事件状态。为此,我可以使用 while 循环,或将其“死锁”。在性能方面哪个更好?

while True: 
    time.sleep(1) 

或

from threading import Event 
Event().wait() 

在这两种情况下,我都可以使用 ctrl+c 中断主线程。

编辑:或者有更好的方法吗?

请您参考如下方法:

使用time.sleep(delay),您必须等到 sleep 时间结束才能响应事件,因此代码的响应能力取决于延迟时间。使用 Event().wait() 事件管理时,您的应用程序的响应速度应该更快,因为它会立即响应外部刺激,而无需等待延迟结束。然而,另一方面,这也意味着托管广告必须比将在延迟时间内释放 GIL 的 time.sleep(delay) 更频繁地获取/释放 GIL。 这对性能有何影响?
根据应用程序的类型,如果您有很多事件线程,您可能会发现一些细微差别。这个问题在 Python 2x 或更早版本中尤为明显,在 Python 3x 中,这些函数在低级别上变得贫乏,问题就不那么明显了。

如果您有兴趣了解有关该主题的更多信息,here您将找到使用 python3 获取锁的函数的 C 实现。

我希望我已经完整地回答了你的问题。