Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python代码覆盖率和多处理_Python_Multiprocessing_Code Coverage_Coverage.py_Coveralls - Fatal编程技术网

Python代码覆盖率和多处理

Python代码覆盖率和多处理,python,multiprocessing,code-coverage,coverage.py,coveralls,Python,Multiprocessing,Code Coverage,Coverage.py,Coveralls,我结合使用跟踪测试脚本的python代码覆盖率。我使用以下命令: coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py coverage combine coveralls --verbose 这很好地工作,除了。不跟踪工作池或子进程执行的代码 是否有可能同时跟踪多处理代码?我缺少什么特别的选择吗?也许向多处理库添加包装器,以便在

我结合使用跟踪测试脚本的python代码覆盖率。我使用以下命令:

coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose
这很好地工作,除了。不跟踪工作池或子进程执行的代码

是否有可能同时跟踪多处理代码?我缺少什么特别的选择吗?也许向多处理库添加包装器,以便在每次生成新进程时开始覆盖

编辑

我(和Jornsharpe,也:-)找到了一个

然而,这对我不起作用,我的构建几乎在开始后就被杀死了。我在我的本地机器上检查了这个问题,显然,将补丁添加到多处理会破坏我的内存。使用此修复程序时,占用远低于1GB内存的测试需要超过16GB的内存

EDIT2

猴子补丁在一个小的修改后就可以工作了:移除
config\u文件
解析(
config\u文件=os.environ['COVERAGE\u PROCESS\u START']
)起到了作用。这就解决了内存膨胀的问题。因此,相应的行简单地变成:

cov = coverage(data_suffix=True)

Coverage 4.0包括一个命令行选项来处理这个问题。之后必须使用
coverage combine
。例如,如果您的测试在
回归测试.py
中,那么您只需在命令行执行此操作:

coverage run --concurrency=multiprocessing regression_tests.py
coverage combine

我已经花了一些时间试图确保覆盖率与
多处理.Pool
一起工作,但从来没有起过作用

我终于做了一个修复,使它工作-如果有人指导我,如果我做错了什么,我会很高兴


您不直接测试这些子进程的代码吗?嗯,是的,大部分我都测试。但是,有些部分只在使用多处理时才有用并执行(比如用锁包装数据库访问或使用多处理队列强制执行串行数据存储)。我自己也知道,由于测试的成功,这段代码能够正常工作。如果这也能出现在工作服上那就太好了:-)看,通过感谢,我也偶然发现了这个。然而,猴子补丁不适合我。将此添加到我的脚本中几乎会立即杀死我构建的Travis CI。我也在本地机器上检查了这个。显然,猴子补丁破坏了我的记忆。覆盖率为测试分配了超过16GB的内存,这些测试通常需要少于1GB的内存。@SmCaterpillar我很想听听您的经验。删除配置文件解析的想法似乎很奇怪:我无法想象解析配置文件将如何从根本上改变内存占用。覆盖率、过程和开始对您有什么价值?你有.coveragerc文件吗?如果你想深入了解,请给我发一封电子邮件。感谢你指出以后使用
覆盖率组合的要求。我已经旋转了一段时间,试图弄明白为什么我的
文件中的
并发=多处理
。coveragerc
不起作用。你能给这个答案添加一个简单的基本示例吗?“这对我会有很大帮助。”卢卡卡佩莱蒂说;希望这能有所帮助。我相信这里的链接可能会对你有所帮助:-看来你需要在之后打电话加入线程以避免一些问题。非常感谢Davis-几年后我就错过了这个问题。:)