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). |