我有一个主线程启动多个守护线程来监听文件系统事件。 我需要让主线程保持事件状态。为此,我可以使用 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 实现。
我希望我已经完整地回答了你的问题。
