Python代码覆盖和多处理

2024-05-05 12:09:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用coverallscoverage.py来跟踪测试脚本的python代码覆盖率。我使用以下命令:

coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose

除了multiprocessing之外,这一切都很好。不跟踪工作进程池或子进程执行的代码。在

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

编辑

我(和jornsharpe,也:-)发现了一个monkey-patch for multiprocessing。在

但是,这对我不起作用,我的Tracis-CI构建几乎在启动后就被终止了。我在我的本地计算机上检查了这个问题,很明显,在多处理程序中添加了补丁会破坏我的内存。如果测试占用的内存远小于1GB,则需要超过16GB的内存。在

编辑2

猴子补丁做了一个小小的修改后就可以工作了:移除 config_file解析(config_file=os.environ['COVERAGE_PROCESS_START'])做到了这一点。这解决了内存膨胀的问题。相应地,相应的行简单地变成:

^{pr2}$

Tags: 内存run代码py脚本config编辑进程
2条回答

我花了一些时间来确保覆盖率与multiprocessing.Pool一起工作,但它始终没有起作用。在

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

https://gist.github.com/andreycizov/ee59806a3ac6955c127e511c5e84d2b6

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

coverage run  concurrency=multiprocessing regression_tests.py
coverage combine

相关问题 更多 >