billiard
billiard copied to clipboard
How to cleanly end processes in a Pool?
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?