billiard icon indicating copy to clipboard operation
billiard copied to clipboard

How to cleanly end processes in a Pool?

Open nedbat opened this issue 1 year ago • 0 comments

Coverage.py needs subprocesses to end cleanly so that all the measured data will be written out. With multiprocessing, this works to make the workers end correctly:

def test_foo():
    with multiprocessing.Pool(processes=1) as pool:
        # ... use the pool, for example: pool.apply(complex_math_verification)
        pool.close()
        pool.join()

Similar code with billiard does not end the processes cleanly:

from billiard.pool import Pool

def test_foo():
    with Pool(processes=1) as pool:
        pool.apply(complex_math_verification)
        pool.close()
        pool.join()

Coverage issues https://github.com/nedbat/coveragepy/issues/1673 and https://github.com/nedbat/coveragepy/issues/1910 have more details.

Is this a bug in billiard, or does it need different code to cleanly end the worker processes?

nedbat avatar Dec 27 '24 15:12 nedbat