我有一个主线程,它启动多个监听文件系统事件的守护线程。我需要保持主线程活着。为此,我可以使用 while 循环,或“死锁”它。哪个更好,性能明智?
while True:
time.sleep(1)
或者
from threading import Event
Event().wait()
在这两种情况下,我都可以使用 ctrl+c 中断主线程。
编辑:还是有更好的方法?
我有一个主线程,它启动多个监听文件系统事件的守护线程。我需要保持主线程活着。为此,我可以使用 while 循环,或“死锁”它。哪个更好,性能明智?
while True:
time.sleep(1)
或者
from threading import Event
Event().wait()
在这两种情况下,我都可以使用 ctrl+c 中断主线程。
编辑:还是有更好的方法?
您将time.sleep(delay)
不得不等到睡眠时间结束才能响应事件,因此您的代码的响应能力取决于延迟时间。在使用Event().wait()
事件管理时,您的应用程序应该响应更快,因为它会立即响应外部刺激,而无需等待延迟结束。但是,另一方面,这也意味着托管广告必须比time.sleep(delay)
在延迟时间内释放 GIL 更频繁地获取/释放 GIL。这对性能有何影响?
根据应用程序的类型,如果您有很多活动线程,您可能会看到一些小的差异。这个问题在 Python 2x 或更早的版本中尤为明显,在 Python 3x 中这些功能在底层是贫乏的,问题就不太明显了。
如果您有兴趣了解有关该主题的更多信息,请在此处找到使用 python3 获取锁的函数的 C 实现。
我希望我已经完全回答了你的问题。