New submission from Christopher Hunt <chrah...@gmail.com>:
When a function is executed by a multiprocessing.Process and uses sys.exit, the actual exit code reported by multiprocessing is different than would be expected given the Python interpreter behavior and documentation. For example, given: from functools import partial from multiprocessing import get_context import sys def run(ctx, fn): p = ctx.Process(target=fn) p.start() p.join() return p.exitcode if __name__ == '__main__': ctx = get_context('fork') print(run(ctx, partial(sys.exit, 2))) print(run(ctx, partial(sys.exit, None))) print(run(ctx, sys.exit)) ctx = get_context('spawn') print(run(ctx, partial(sys.exit, 2))) print(run(ctx, partial(sys.exit, None))) print(run(ctx, sys.exit)) ctx = get_context('forkserver') print(run(ctx, partial(sys.exit, 2))) print(run(ctx, partial(sys.exit, None))) print(run(ctx, sys.exit)) when executed results in $ python exit.py 2 1 1 2 1 1 2 1 1 but when Python itself is executed we see different behavior $ for arg in 2 None ''; do python -c "import sys; sys.exit($arg)"; echo $?; done 2 0 0 The documentation states > sys.exit([arg]) > ... > The optional argument arg can be an integer giving the exit status > (defaulting to zero), or another type of object. The relevant line in multiprocessing (https://github.com/python/cpython/blame/1cffd0eed313011c0c2bb071c8affeb4a7ed05c7/Lib/multiprocessing/process.py#L307) seems to be from the original pyprocessing module itself, and I could not locate an active site that maintains the repository to see if there was any justification for the behavior. ---------- components: Library (Lib) files: multiprocessing-exitcode-3.7.1.patch keywords: patch messages: 333531 nosy: chrahunt priority: normal severity: normal status: open title: sys.exit() in a multiprocessing.Process does not align with Python behavior type: behavior versions: Python 2.7, Python 3.4, Python 3.5, Python 3.6, Python 3.7 Added file: https://bugs.python.org/file48045/multiprocessing-exitcode-3.7.1.patch _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue35727> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com