Python multiprocesamiento PicklingError: No se puede encurtir <tipo 'función'>

Lamento no poder reproducir el error con un ejemplo más simple, y mi código es demasiado complicado para publicarlo. Si ejecuto el programa en el shell de IPython en lugar del Python normal, las cosas funcionan bien.

Busqué algunas notas anteriores sobre este problema. Todos fueron causados por el uso de grupo para llamar a la función definida dentro de una función de clase. Pero este no es el caso para mí.

Exception in thread Thread-3:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/lib64/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

Apreciaría cualquier ayuda

Actualiza: La función I pickle se define en el nivel superior del módulo. Aunque llama a una función que contiene una función anidada. es decir,f() llamadasg() llamadash() que tiene una función anidadai(), y estoy llamando apool.apply_async(f). f(), g(), h() están todos definidos en el nivel superior. Intenté un ejemplo más simple con este patrón y funciona.

Respuestas a la pregunta(14)

Su respuesta a la pregunta