¿Cómo puedo procesar un archivo tar con un grupo de multiprocesamiento de Python?

Estoy tratando de procesar el contenido de un archivo tar usandomultiprocessing.Pool. Puedo usar con éxito la implementación de ThreadPool dentro del módulo de multiprocesamiento, pero me gustaría poder usar procesos en lugar de hilos, ya que posiblemente sería más rápido y eliminar algunos cambios realizados para que Matplotlib maneje el entorno multiproceso. Recibo un error que sospecho que está relacionado con procesos que no comparten espacio de direcciones, pero no estoy seguro de cómo solucionarlo:

Traceback (most recent call last):
  File "test_tarfile.py", line 32, in <module>
    test_multiproc()
  File "test_tarfile.py", line 24, in test_multiproc
    pool.map(read_file, files)
  File "/ldata/whitcomb/epd-7.1-2-rh5-x86_64/lib/python2.7/multiprocessing/pool.py", line 225, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/ldata/whitcomb/epd-7.1-2-rh5-x86_64/lib/python2.7/multiprocessing/pool.py", line 522, in get
    raise self._value
ValueError: I/O operation on closed file

El programa real es más complicado, pero este es un ejemplo de lo que estoy haciendo que reproduce el error:

from multiprocessing.pool import ThreadPool, Pool
import StringIO
import tarfile

def write_tar():
    tar = tarfile.open('test.tar', 'w')
    contents = 'line1'
    info = tarfile.TarInfo('file1.txt')
    info.size = len(contents)
    tar.addfile(info, StringIO.StringIO(contents))
    tar.close()

def test_multithread():
    tar   = tarfile.open('test.tar')
    files = [tar.extractfile(member) for member in tar.getmembers()]
    pool  = ThreadPool(processes=1)
    pool.map(read_file, files)
    tar.close()

def test_multiproc():
    tar   = tarfile.open('test.tar')
    files = [tar.extractfile(member) for member in tar.getmembers()]
    pool  = Pool(processes=1)
    pool.map(read_file, files)
    tar.close()

def read_file(f):
    print f.read()

write_tar()
test_multithread()
test_multiproc()

Sospecho que algo anda mal cuando elTarInfo objeto se pasa al otro proceso pero el padreTarFile no lo es, pero no estoy seguro de cómo solucionarlo en el caso de multiproceso. ¿Puedo hacer esto sin tener que extraer archivos del tarball y escribirlos en el disco?

Respuestas a la pregunta(1)

Su respuesta a la pregunta