我有一些代码使用multiprocessing.Pool来分叉工作并执行并行任务。我试图找到正确的方法运行此代码的单元测试。如何对使用python-multiprocessing的代码进行单元测试
注意我是而不是试图并行测试串行代码测试用例,我知道包像鼻子支持。
如果我编写一个测试所述并行代码的测试函数,并尝试通过以下方法用鼻子运行测试:nosetests tests/test_function.py
非并行测试正确执行,但多处理尝试fork时并行测试失败,因为main不可导入:
File "C:\python-2.7.10.amd64\lib\multiprocessing\forking.py", line 488, in prepare
assert main_name not in sys.modules, main_name
AssertionError: __main__
assert main_name not in sys.modules, main_name
AssertionError: _assert main_name not in sys.modules, main_name
_main__AssertionError
: __main__
这只是重复,直到我终止任务。我可以成功地运行测试,如果我修改tests/test_function.py
包括:
if __name__ == '__main__':
import nose
nose.main()
,然后用python tests\test_function.py
那么,什么是“正确”的方式做到这一点,将与单元测试包合并执行(没有按不必是鼻子)?
ENVIRON:Python的2.7.10 AMD64在Windows 7 64位
链接到补丁python 2.7中提到的答案:https://hg.python.org/cpython/rev/c82588ca3a79。 (无法将它包含在答案中,因为目前我只能使用最多两个链接) – augur