PyUnit с дочерними процессами - PullRequest
2 голосов
/ 03 февраля 2011

В некотором коде Python я fork и выполняю некоторую обработку в дочернем процессе, пока родитель ожидает его завершения. Это не exec после fork.

У меня проблема с тестированием этого кода в PyUnit, потому что, когда дочерний процесс явно завершает работу с sys.exit, он создает ошибку PyUnit.

Приведенный ниже код вызывает проблему

class TestClass(TestCase):
    def test(self):
        pid = os.fork()
        if pid == 0:
            sys.exit(0)
        else:
            os.waitpid(pid,0)

Это ошибка

Traceback (most recent call last):
  File "test.py", line 15, in test
    sys.exit(0)
SystemExit: 0
----------------------------------------------------------------------
Ran 1 test in 0.007s

FAILED (errors=1)

Есть ли какой-нибудь способ избежать провала теста PyUnit, если дочерний процесс явно завершается?

1 Ответ

1 голос
/ 03 февраля 2011

Все, что делает sys.exit, вызывает исключение SystemExit, которое всплывает как обычно.Однако os._exit (0) завершится немедленно и не даст возможности запустить какой-либо код очистки.Это мешает PyUnit делать что-либо, в том числе проваливать тест.Таким образом, в вашем тестовом коде вы можете перехватить SystemExit и вызвать вместо него os._exit.

Если дочерний процесс ожидает некоторой явной очистки при выходе, вам придется организовать это в вашем тестовом примере.

...