Снос всех открытых тем после завершения всех юнит-тестов Python

1

в этой ветке много обсуждается, почему не рекомендуется убивать потоки. И я согласен, когда мы говорим о реальной программе. Я пишу модульные тесты для нескольких компонентов, а также некоторые интеграционные тесты между ними. Некоторые из них требуют потоковой обработки. Когда тесты терпят неудачу, некоторые потоки остаются открытыми, запертыми в .get() очереди. Это заставляет весь набор тестов застревать, а не полностью. Я запускаю либо ptw (pytest watch), либо пользовательский цикл pytest с inotifywait чтобы следить за изменениями в моих файлах, чтобы перезапустить пакет.

Когда все тесты завершены, я хочу, чтобы пакет убивал все оставшиеся потоки, чтобы завершить цикл, и не застрять на потоке где-то, что просто открыто из-за ошибки теста. Это возможно?

Теги:
multithreading
testing

1 ответ

0

Не существует изящного способа остановить поток, но вы можете установить для своего daemon значение True.

фрагмент кода:

import threading

all_child_threads = [thread for thread in threading.enumerate() if thread != threading.main_thread()]
for thread in all_child_threads:
    thread.daemon = True

Затем они прекратятся, когда основной поток прекратится.

  • 0
    Это может сработать, однако я точно не знаю, где его разместить. Теоретически я мог бы поместить его в каждый tearDownClass всех классов, использующих многопоточность в моих тестах, но глобальный хук был бы лучше.
  • 0
    Разве это не другой вопрос? Что только я могу вам помочь по этому поводу: docs.pytest.org/en/latest/…

Ещё вопросы

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