死锁主线程而不是忙等待更好吗?
Is it better to deadlock main thread instead of busy waiting?
我有一个主线程启动多个守护线程来监听文件系统事件。
我需要让主线程保持活动状态。为此,我可以使用 while 循环,或 "deadlock" 它。性能方面哪个更好?
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 中这些功能在低级别上变得贫乏,问题不太明显。
如果您有兴趣了解有关该主题的更多信息,here 您将找到使用 python3 获取锁的函数的 C 实现。
希望我已经完全回答了你的问题。
我有一个主线程启动多个守护线程来监听文件系统事件。 我需要让主线程保持活动状态。为此,我可以使用 while 循环,或 "deadlock" 它。性能方面哪个更好?
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 中这些功能在低级别上变得贫乏,问题不太明显。
如果您有兴趣了解有关该主题的更多信息,here 您将找到使用 python3 获取锁的函数的 C 实现。
希望我已经完全回答了你的问题。