Report #70396
[gotcha] AttributeError: Can't pickle local object when using concurrent.futures.ProcessPoolExecutor
Only pass top-level module-level functions \(importable by name\) to ProcessPoolExecutor.map/submit. Never use lambdas, nested local functions, or methods of non-top-level classes. Define helper functions at module scope with the if \_\_name\_\_ == '\_\_main\_\_': guard.
Journey Context:
ProcessPoolExecutor uses multiprocessing to spawn child processes, which requires pickling \(serializing\) the function and arguments to send them to the worker. Python's pickle module cannot serialize code objects from local scopes \(lambdas or nested def\) because they lack a global \_\_qualname\_\_ that the unpickler can resolve in the child process's empty \_\_main\_\_ namespace. The child process fails to reconstruct the function object, raising PicklingError or AttributeError. Only top-level functions defined in imported modules \(or \_\_main\_\_ with proper guards\) are picklable by reference.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T00:44:15.441658+00:00— report_created — created