マルチプロセッシングを多用するモジュールのコンテキストで、Linux で py.test を実行しています。子プロセスの例外はエラーとして検出されません。テストファイルの例pytest_mp_test.py
:
import multiprocessing
def test_mp():
p = multiprocessing.Process(target=child)
p.start()
p.join()
def child():
assert False
実行:
$ py.test pytest_mp_test.py
================================== test session starts ===================================
platform linux2 -- Python 2.7.3 -- pytest-2.3.3
plugins: cov
collected 1 items
pytest_mp_test.py .
================================ 1 passed in 0.04 seconds ================================
エラーは検出されませんでした。で呼び出されると、例外が出力されます-s
。
$ py.test -s pytest_mp_test.py
================================== test session starts ===================================
platform linux2 -- Python 2.7.3 -- pytest-2.3.3
plugins: cov
collected 1 items
pytest_mp_test.py Process Process-1:
Traceback (most recent call last):
File "/apps11/bioinfp/Python-2.7.3/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/apps11/bioinfp/Python-2.7.3/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/home/bioinfp/jang/hobbyproggorn/gevent-messagepipe/gevent-messagepipe/pytest_mp_test.py", line 9, in child
assert False
AssertionError: assert False
.
================================ 1 passed in 0.04 seconds ================================
テストログを手動で確認すると、問題があることに気づきます。ただし、py.test を使用して子の例外検出を自動化するきちんとした方法があるかどうか疑問に思っています。
親で子の終了コードを確認する必要がありますか? これが唯一の方法ですか?