2017-09-29 3 views
0

multiprocessing.dummy 패키지와 deepdish에 압축 된 h5 파일을 쓰는데 문제가 있습니다. 이것은 내가 뭐하는 거지입니다 : 나는 명령을 저장 deepdish 언급 할 때파이썬 다중 처리. 더미와 심오함이 함께 작동하지 않습니다.

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) 

모든 것이 잘 작동합니다. dd가 Windows에서 손상된 파일을 생성하고 Python이이 오류를 감지하여 충돌이 발생한 것 같습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까? 정말 고맙습니다.

+0

오류 메시지가 도움이 될 것입니다. 예외 처리기에서 데이터를 저장하기 위해 메서드 호출을 래핑하려고 시도 했습니까? –

+0

실제로 오류 메시지가 없습니다. 파이썬은 예외 코드 1073741819와 함께 존재하며 그것을 검색 한 후에 h5 파일을 작성하는 데 문제가있는 사람을 찾았습니다. – anki

답변

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() 
관련 문제