Como posso processar um arquivo tar com um pool de multiprocessamento Pytho

Estou tentando processar o conteúdo de um tarfile usandomultiprocessing.Pool. Consigo usar com êxito a implementação ThreadPool no módulo de multiprocessamento, mas gostaria de poder usar processos em vez de threads, pois seria mais rápido e eliminar algumas alterações feitas pelo Matplotlib para lidar com o ambiente multithread. Estou recebendo um erro que suspeito estar relacionado a processos que não compartilham espaço de endereço, mas não sei como corrigi-lo:

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

O programa atual é mais complicado, mas este é um exemplo do que estou fazendo que reproduz o erro:

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

Suspeito que algo esteja errado quando oTarInfo objeto é passado para o outro processo, mas o paiTarFile não é, mas não sei como corrigi-lo no caso de multiprocessos. Posso fazer isso sem precisar extrair arquivos do tarball e gravá-los no disco?

questionAnswers(1)

yourAnswerToTheQuestion