Tecnología · GUÍA PRÁCTICA
¿Python dice “Can’t pickle local object”? Demuestra el límite de proceso antes de cambiar el serializador
La excepción nombra el objeto que el worker no puede reconstruir. Registra método de inicio, callable, argumentos y ruta de importación antes de forzar fork o cambiar de serializador.

Un objeto que cruza el límite de proceso no puede serializarse o resolverse por nombre. Puede ser una función anidada, lambda, cierre, método ligado, lock, socket o una instancia que los captura.
Crea un registro desde el launcher real: versiones, start method, módulo, nombre cualificado, tipos de argumentos y prueba de importación en un child nuevo.
1. Fija launcher y start method reales
Reproduce con el mismo script, runner, notebook, IDE, servicio o framework. Registra python -VV, sys.executable, contexto y get_start_method().
Guarda el traceback y localiza si falla en start, map, submit, queue, retorno o inicio del worker.
2. Identifica callable y grafo de objetos
Registra type(fn), __module__ y __qualname__. <locals> o <lambda> demuestra que no se resolverá como atributo importable.
Prueba callable y argumentos por separado; guarda solo el primer tipo fallido y una ruta estructural segura, nunca secretos.
3. Demuestra importación en un intérprete nuevo
Mueve el entrypoint mínimo al nivel superior del módulo, protege la creación con main guard y haz importable el paquete en producción.
Con el mismo intérprete y directorio, inicia un proceso nuevo e importa módulo y nombre cualificado sin estado de notebook o ruta temporal del IDE.
4. Separa recursos del padre de datos simples
Un método ligado puede arrastrar la instancia completa. Crea locks, archivos, sockets, clientes y conexiones dentro del child o pasa configuración pequeña.
Si falla un argumento, reduce la tarea a un registro simple y reconstruye recursos en initializer o worker con limpieza explícita.
5. Trata start method y serializer como decisiones acotadas
fork puede hacer pasar una prueba Linux sin demostrar portabilidad y puede ser inseguro con librerías con hilos.
cloudpickle o dill cambian dependencias, compatibilidad y confianza de deserialización; úsalos solo con contrato explícito y receptor confiable.
6. Exige una prueba de salida con worker nuevo
Ejecuta una tarea pequeña y determinista con el mismo launcher y start method; verifica importación, inputs, resultado y salida limpia.
Registra intérprete, start method, qualified name, input schema, PID, checksum o valor esperado y exit status.
