New submission from Yoni Rozenshein <yoni...@gmail.com>:

multiprocessing will attempt to pickle things using ForkingPickler when 
starting a new process in spawn mode (in Windows this is the only mode, in 
Linux this is a non-default but settable mode).

When run within the context of a unit test, if it has to pickle a TestCase 
subclass, it encounters objects that can't be pickled. The attached file shows 
a minimum working example (uncomment the two commented lines under __main__ to 
run with pytest).

When run with unittest.main(), it raises:

TypeError: cannot serialize '_io.TextIOWrapper' object

When run with pytest.main(), it raises:

AttributeError: Can't pickle local object 
'ArgumentParser.__init__.<locals>.identity'

Note that changing the _child_process in my example to a 
classmethod/staticmethod or moving it to a top-level function outside the class 
works around this issue (both with unittest and with pytest).

----------
components: Library (Lib)
files: mp_pickle_issues.py
messages: 319811
nosy: Yoni Rozenshein
priority: normal
severity: normal
status: open
title: [multiprocessing] Multiprocessing in spawn mode doesn't work when the 
target is a method in a unittest.TestCase subclass, when run either with 
unittest or with pytest
type: behavior
versions: Python 3.6, Python 3.7, Python 3.8
Added file: https://bugs.python.org/file47645/mp_pickle_issues.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue33884>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to