Лучше ли блокировать основной поток, чем ждать занят? - PullRequest
2 голосов
/ 23 сентября 2019

У меня есть основной поток, который запускает несколько потоков deamon, слушающих события файловой системы.Мне нужно сохранить основной поток живой.Для этого я могу использовать цикл while или «заблокировать» его.Что лучше с точки зрения производительности?

while True:
    time.sleep(1)

или

from threading import Event
Event().wait()

Я могу прервать основной поток, используя ctrl + c в обоих случаях.

EDIT: Или есть лучший способ?

1 Ответ

2 голосов
/ 23 сентября 2019

С time.sleep(delay) вам придется ждать до конца времени ожидания, чтобы ответить на событие, поэтому скорость отклика вашего кода зависит от времени задержки.В то время как при Event().wait() управлении событиями ваше приложение должно быть намного более отзывчивым, поскольку оно будет немедленно реагировать на внешние раздражители, не дожидаясь окончания задержки.Однако, с другой стороны, это также означает, что управляемое объявление должно будет получать / выпускать GIL гораздо чаще, чем time.sleep(delay), который будет высвобождать GIL в течение времени задержки. Как это влияет на производительность?
В зависимости от типа приложения, если у вас много активных потоков, вы можете увидеть некоторые небольшие различия.Эта проблема была особенно очевидна в Python 2x или более ранних версиях, в Python 3x эти функции обеднены на низком уровне, и проблема гораздо менее очевидна.

Если вы заинтересованы в получении дополнительной информации по этому вопросу, здесь вы найдете реализацию функции C для получения блокировки с помощью python3.

Надеюсь, я полностью ответил на ваш вопрос.

...