マルチプロセッシング プールから書き込んでいる gzip ファイル ハンドルがあります。残念ながら、出力ファイルは特定の時点で破損しているように見えるため、次のようにすると次のようになりますzcat out | wc
。
gzip: out: invalid compressed data--format violated
gzipを使用しないことで問題に対処しています。しかし、なぜこれが起こっているのか、そして解決策があるのか について興味があります。
問題があるかどうかはわかりませんが、制御していないリモートのLinuxマシンでコードを実行していますが、それはubuntuマシンだと思います。パイソン 2.7.3
少し簡略化したコードを次に示します。
lock = Lock()
ohandle = gzip.open("out", "w")
def process(fn):
rv = []
for l in open(fn):
sometext = dosomething(l)
rv.append(sometext)
lock.acquire()
for sometext in rv:
print >> ohandle, sometext
lock.release()
pool = Pool(processes=4)
pm = pool.map(process, some_file_list])
ohandle.close()