小编Kyl*_*yle的帖子

如何对使用python-multiprocessing的代码进行单元测试

我有一些代码使用multiprocessing.Pool来分叉工作者并并行执行任务.我正在尝试找到运行此代码的单元测试的正确方法.

注意我并不是要尝试并行测试串行代码测试用例,我知道像nose支持的软件包.

如果我编写一个测试所述并行代码的测试函数,并尝试使用nose运行测试: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__
Run Code Online (Sandbox Code Playgroud)

在我终止任务之前,这只会重复.如果我修改tests/test_function.py为包括以下内容,我可以成功运行测试:

if __name__ == '__main__':
    import nose
    nose.main()
Run Code Online (Sandbox Code Playgroud)

然后执行 python tests\test_function.py

那么,与单元测试包集成的"正确"方法是什么(不一定是鼻子)?

Environ:Windows 7 64位上的Python 2.7.10 amd64

python unit-testing nose python-multiprocessing

8
推荐指数
2
解决办法
6964
查看次数