Как правильно блокировать ничего не делать?

1

Есть случаи, когда мне нужно, в конце моей программы, ничего не делать и не выходить из программы. Это, как правило, случай, когда у меня есть бесконечные потоки (которые я контролирую или нет).

Есть несколько решений, которые я использую:

time.sleep(1000000)
  • Pro: простой однострочный
  • Con: 1000000 секунд - 11 дней, нужно оценить, как долго будет выполняться сценарий, и в конечном итоге сбой в оценке
for thread in threading.enumerate():
    try:
        thread.join()
    except RuntimeError:
        # trying to join the main thread
        pass
  • Pro: кажется чистым
  • Con: только для случаев, когда я управляю потоками
while True:
    pass
  • Pro: Я не знаю, потому что...
  • Con: бесполезно интенсивный процессор

Есть ли питонно правильный способ "ничего не делать блокирующим способом"?

  • 1
    Что мешает тебе sleep в петле? Этот метод обычно используется и стандартной библиотекой.
  • 0
    Можете ли вы уточнить вашу цель? Есть ли какие-то условия, которые вы ждете? Вы утверждаете, что у вас есть некоторые бесконечные потоки, но ожидание очень долго или бесконечно неправильно по какой-то причине? Почему вы ждете потоков, в первую очередь, потоков daemon , которых по какой-то причине не должно быть?
Показать ещё 3 комментария
Теги:
python-3.x

2 ответа

2
Лучший ответ

Хорошим способом было бы ждать ввода. Это было бы просто, а также дать вам контроль над тем, когда вы хотите продолжить или выйти из программы.

sys.stdin.readline()
2

Будь проще:

while True:
    time.sleep(1000000)

Это устраняет проблему, из-за которой может прерываться sleep(), а также обрабатывать возможность запуска программы в течение многих недель.

Это портативный, очевидный и экологически чистый!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню