2017-03-28 12 views
0

나는이 사이트에 대한 답변을 모색했지만 찾으려하지 않았다. 내 문제는 내가 파이썬에서 다른 형식으로 여러 파일을 변환하려는 것입니다. 4 개의 파일을 동시에 변환하고 싶습니다. 이미 멀티 프로세싱 라이브러리에서 process 키워드를 사용하여 코드를 만들었지 만 작동하지만 여러 프로세스를 사용하여 하나씩 파일을 변환합니다. 이는 내가 원하는 바가 아닙니다. 이 코드와 동시에 변환하려고 :파이썬에서 다중 처리로 여러 파일 변환하기

def convert_all_files (directoryName): 
    directoryName = r'Here I set my directory name C:\...' 
    files2=[] 
    pool=mp.Pool(4) 
    for path, dirs, files in os.walk(directoryName): 
    for f in files: 
     f1=f 
     path1=path   
     files2.append((path1,f1)) 
    for j in range(0, len(files2)): 
    pool.apply_async(convert, (files2[j][0],files2[j][1])) 
    pool.close() 
    pool.join() 

내 문제 코드가 실행되지만 기능 변환이 실행되지 않으며, 코드 라인 pool.join() (나는이 기술을 사용에 정지 점이다 변환이 매우 길기 때문에 많은 시간이 걸리고,이 코드를 실행하면 변환이 순간적으로 작동하지 않습니다.)

위의 함수를 다른 파일에서 사용합니다. 내 모듈을 가져오고 함수를 호출합니다.

누구에게 아이디어가 있습니까? 감사합니다.

+0

귀하의 코드 들여 쓰기가 잘못된 것, 당신이 그것을 확인하시기 바랍니다 수 있습니까? – Thom

+0

안녕하세요! 답장을 보내 주셔서 감사합니다. 이 포럼에 코드를 붙여 넣으면 코드 식별이 잘못되었습니다. 나는 지금 또 하나의 righ를 설정했다. –

답변

0

동시에 4 가지 변환 제한없이 작동하는 해결책입니다. 당신은 제한이 필요한 경우

def convert_all_files(directoryName): 
    for folder, subs, files in os.walk(directoryName): 
     for filename in files: 
      p = Process(target=convert, args=(folder, filename)) 
      p.start() 

, 여기에 솔루션입니다,하지만 난이 최고입니다 확실하지 않다 :

def convert_all_files(directoryName): 
    process_count = 0 
    for folder, subs, files in os.walk(directoryName): 
     for filename in files: 
      p = Process(target=convert, args=(folder, filename)) 
      p.start() 

      # Maybe not the better way to handle it 
      process_count = process_count + 1 
      if process_count % 4 == 0: 
       p.join() 
관련 문제