2014-12-16 1 views
0

코드에서 다중 처리 .Pool 모듈을 사용하고 있는데, pool.map() 함수를 사용하여 목록의 항목을 병렬로 실행하고 있습니다. pool.map 함수가 실행될 때 목록의 각 항목에 대한 별도의 작업 디렉토리. 목록 항목에는 모델이 포함되어 있으며 시뮬레이션 기능으로 시뮬레이션됩니다. 현재 내 코드 목록의 각 모델을 시뮬레이션하고 결과 파일을 생성합니다이다중 처리 풀 목록의 각 항목마다 다른 디렉토리에서 실행

 items=['BouncingBall.mo','HelloWorld.mo'] 
    from multiprocessing import Pool 
    from multiprocessing.dummy import Pool as ThreadPool        
    pool = ThreadPool() 
    pool.map(parallel,items) 

    def simulate(lists): 
     np='some directory path' 
     os.chdir(np) 
     model.simulate(lists) 

시뮬레이션 기능처럼 보이는, 내가 다른 디렉토리의 목록에있는 항목을 실행하려면, 나는() os.chdir으로 시도 두 개의 디렉토리를 생성하지만 결과는 두 모델 모두의 한 디렉토리에 저장됩니다. 두 개의 다른 디렉토리에서 결과 파일을 실행하는 방법. 각 프로세스마다 다른 디렉토리를 작성하고 별도로 실행할 수 있습니다.

답변

1

이 호출은

입니다.
os.chdir(np) 

모든 스레드 (및 주 스레드)는 모두 과 동일하므로 프로세스에 영향을줍니다.

디렉토리를 전역으로 변경하는 대신 전체 경로를 사용하여 작성한 파일을 열어야합니다.

실제 프로세스를 사용하는 경우 암시적인 fork 호출 이후에 다른 프로세스가 있기 때문에 이러한 일이 발생하지 않습니다.

옵션은 다음과 같습니다

  1. 직렬이 작업을 수행.
  2. 스레드 대신 프로세스 사용
  3. 은 가능한 경우 매개 변수로 결과를 저장할 경로를 제공하고 사용합니다.

은 내가이 os.chdir ('/ BouncingBall C'에 사용한다, 1

+0

2. 그래서 대신 os.chdir()의 사용에 무엇을 의미하는지 선택해야합니다 것 같다) 결과 파일을 해당 디렉토리에 작성하십시오. – arun

+0

결과를 작성할 때'open (file, 'w')'과 같은 것을 사용하여 파일을 열었을 것입니다. 'open (DIR + file, 'w')'을 사용해야합니다. 여기서'DIR'은이 결과의 특정 디렉토리입니다. 정확히 무엇을하고 있는지 알지 못하면 자신이해야 할 일을 알려주지 못합니다. 그러나 그것은 사물의 정신입니다. –

+0

이 함수는 model.simualte (BouncingBall.mo)가 호출 될 때 시뮬레이터에서 결과 파일을 생성 할 때 어떤 결과도 작성하지 않을 것이고, 나는 아무 것도 쓰지 않을 것이고 결과 파일을 생성하기를 원할 것이다. 새로 생성 된 디렉토리 – arun

관련 문제