Python multiprocessing.dummy和deepdish不能一起工作

时间:2017-09-29 07:40:13

标签: python python-multiprocessing hdf5 h5py

我的multiprocessing.dummy包和deepdish有问题要编写压缩的h5文件。 这就是我在做的事情:

import deepdish as dd
from multiprocessing.dummy import Pool

def writeThings(args):
    path, np_array = args
    dd.io.save(path, {'arr': np_array}, compression='blosc')

p = Pool(4)
p.map(writeThings, all_np_arrays_and_paths)

当我评论deepdish save命令时,一切正常。 似乎dd在Windows上创建了一些损坏的文件,而Python检测到这个错误,只是崩溃了。有谁知道如何解决这一问题?非常感谢你。

1 个答案:

答案 0 :(得分:0)

为了澄清,路径彼此不同,所以我写入不同的文件。但是,这个简单功能仍然不起作用。但是,如果我将其嵌入到具有锁定的threading.Thread类中并使用dd.io.save包围lock.acquire命令,并且在写入文件lock.release之后一切正常。

以下是每个人的代码段:

import threading

class writeThings(threading.Thread):
    def __init__(self, args, lock):
        super().__init__()
        self.args = args
        self.lock = lock

    def run(self):
        while self.args:
            path, np_array = self.args.pop()
            # Give this thread unique writing rights
            self.lock.acquire()
            dd.io.save(path, {"arr": np_array}, compression='blosc')
            self.lock.release()

lock = threading.Lock()
n_threads = 4
threads = []

for i in range(n_threads):
    threads.append(writeThings(args_junk[i],lock))

for i in range(n_threads):
    threads[i].start()

for i in range(n_threads):
    threads[i].join()