2014-05-21 4 views
2

목록에 N 개의 .csv 파일이 동시에 포함되어있는 목록을 읽으려고합니다.목록의 다중 파일 다중 파일

가 지금 내가 다음을 수행하십시오의은 listDir과

수입 멀티 프로세스

  1. 빈 목록
  2. 추가] 목록 .CSV의
  3. 데프 A() - 심지어 파일 (목록 [: : 2])
  4. def B (홀수) 파일 (목록 [1 :: 2]
  5. 프로세스 1 def A()
  6. 공정 2 데프 B()

    def read_all_lead_files(folder): 
    
        for files in glob.glob(folder+"*.csv"): 
         file_list.append(files) 
         def read_even(): 
          file_list[::2]  
         def read_odd(): 
          file_list[1::2] 
    
        p1 = Process(target=read_even) 
        p1.start() 
        p2 = Process(target=read_odd) 
        p2.start() 
    

기능을 처리 할 수있는리스트의 분할을 분할하는 빠른 방법이 있는가?

+0

"짝수"및 "이상한"파일 (다른 * *은 무엇을 의미합니까?)에 대해 다른 처리를한다고 말하는 것입니까? – tdelaney

+1

"빠름"? 어떤 의미에서? 두 함수가 실제로 어떤면에서 다른가요? 두 기능이하는 일과 개선하려는 일에 대해 최소한의 지식이 없으면 우리가 어떻게 당신을 도울 수 있는지 보지 못합니다. 몇 가지 최소 코드를 게시하십시오. –

+0

목록을 짝수 및 홀수로 실제로 분할하는 속도가 매우 빠릅니다. 그러나 모든 다른 파일에 대한 A()/B()는 매우 임의적 인 것처럼 보입니다. 왜 그것을하고 있습니까? – tdelaney

답변

5

원래 질문이 분명하지 않기 때문에 귀하의 요청에 따라 추측하고 있습니다. os.listdir은 주문을 보장하지 않기 때문에 "두"함수가 실제로 동일하고 여러 파일에 대해 동일한 프로세스를 동시에 수행해야한다고 가정합니다.

내 경험에 따르면 가장 쉬운 방법은 Pool을 돌려서 각 파일에 대한 프로세스를 시작한 다음 기다리는 것입니다. 예 :

import multiprocessing 

def process(file): 
    pass # do stuff to a file 

p = multiprocessing.Pool() 
for f in glob.glob(folder+"*.csv"): 
    # launch a process for each file (ish). 
    # The result will be approximately one process per CPU core available. 
    p.apply_async(process, [f]) 

p.close() 
p.join() # Wait for all child processes to close. 
+0

glob는 목록을 반환합니다. 당신은 for 루프를'p.apply_async (process, glob (folder + "*. csv"))로 대체 할 수있다. – tdelaney

+0

고마워. –

+0

@tdelaney 나는'p.map_async'를 의미한다고 생각하는데, 사실 그렇습니다. 이런 식으로 진행되는 것을 더 쉽게 볼 수 있기 때문에 명시적인 루프로 철자를 고쳤습니다. –