Skip to content

nested functions in multiprocessing not considered covered #1953

Open
@Ryang20718

Description

@Ryang20718

Describe the bug
If I have a nested function that I call with multiprocessing, it is deemed not covered

To Reproduce
How can we reproduce the problem? Please be specific. Don't link to a failing CI job. Answer the questions below:

Python 3.10.7
coverage.py 7.6, pytest-cov 5.0.0, pytest 8.2.2

implementation.py

import multiprocessing


def _sample_linestring(annotation, sample_dist, level):
    # This line often doesn't show up in coverage without proper config
    return f"Processed {annotation} at level {level} with dist {sample_dist}"


def sample_annotations(annotations, sample_dist):
    with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
        return pool.starmap(_sample_linestring, [(annotation, sample_dist, level) for annotation, level in annotations])


def the_answer():
    """Example function to be tested."""
    annotations = [(f"annotation_{i}", i) for i in range(5)]
    sample_dist = 10
    result = sample_annotations(annotations, sample_dist)

test_implementation.py

from implementation import the_answer

def test_the_answer():
    answer = the_answer()
    assert answer == 42


test_the_answer()

.coveragerc

[run]
parallel = True
concurrency = multiprocessing,thread
  1. pip install pytest==8.2.2 pytest-cov=5.0.0 coverage==7.6
  2. pytest --cov=implementation implementation_test.py --cov-report=term-missing

Expected behavior
We see missing coverage

def _sample_linestring(annotation, sample_dist, level):
    # This line often doesn't show up in coverage without proper config
    return f"Processed {annotation} at level {level} with dist {sample_dist}" # <-- missing coverage

Additional context
Add any other context about the problem here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions