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

Python multiprocessing.dummy and deepdish don't work together

我在使用 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 保存命令时,一切正常。 dd 似乎在 Windows 上创建了某种损坏的文件,而 Python 检测到了这个错误,然后就崩溃了。有谁知道如何解决这一问题?非常感谢。

澄清一下,路径彼此不同,所以我写入了不同的文件。但是,这个 simple 函数仍然不起作用。但是,如果我将其嵌入到具有锁的 threading.Thread class 中,并用 lock.acquire 包围 dd.io.save 命令,并且在写入文件后 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()