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()
我在使用 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()