2014-07-21 13 views
3

001.txt, 002.txt, ..., 411.txt라는 여러 파일에서 데이터를 읽는 코드가 있습니다. 각 파일에서 데이터를 읽고, 그 파일을 만들고, 001.jpg, 002.jpg, ..., 411.jpg로 저장하고 싶습니다.다중 처리로 다중 matplotlib 그림 저장

파일을 반복하여이 작업을 수행 할 수 있지만 작업 속도를 높이기 위해 다중 프로세스 모듈을 사용하고 싶습니다.
그러나 아래 코드를 사용하면 컴퓨터가 멈 춥니 다. 아무 것도 클릭 할 수 없지만 마우스가 움직이고 소리가 계속납니다. 그런 다음 컴퓨터의 전원을 꺼야합니다.

분명히 matplotlib로 다중 프로세스 모듈을 잘못 사용하고 있습니다. 나는 실제로 데이터를 생성하고 문제없이 텍스트 파일에 저장하기 위해 아래 코드와 매우 유사한 것을 사용했다. 내가 뭘 놓치고 있니?

import multiprocessing 

    def do_plot(number): 
     fig = figure(number) 

     a, b = random.sample(range(1,9999),1000), random.sample(range(1,9999),1000) 
     # generate random data 
     scatter(a, b) 

     savefig("%03d" % (number,) + ".jpg") 
     print "Done ", number 
     close() 



    for i in (0, 1, 2, 3): 
     jobs = [] 
    # for j in chunk: 
     p = multiprocessing.Process(target = do_plot, args = (i,)) 
     jobs.append(p) 
     p.start() 
    p.join() 
+0

저는 Linux Mint를 실행하는 쿼드 코어 머신을 추가해야합니다. 나는 또한 pylab을 통해 python을 운영하고있다. 귀하의 제안을 사용하여 –

답변

2

multiprocessing를 사용에서 가장 중요한 것은 단지 주요 프로세스에 대한 모듈의 주요 코드를 실행하는 것입니다. 나는 많은 사진을 더 확장하는 과정 풀 (에 의해 별도의 프로세스의 생성을 대체하는 것도

import matplotlib.pyplot as plt 
import numpy.random as random 
from multiprocessing import Pool 


def do_plot(number): 
    fig = plt.figure(number) 

    a = random.sample(1000) 
    b = random.sample(1000) 

    # generate random data 
    plt.scatter(a, b) 

    plt.savefig("%03d.jpg" % (number,)) 
    plt.close() 

    print("Done ", number) 


if __name__ == '__main__': 
    pool = Pool() 
    pool.map(do_plot, range(4)) 

주 당신이 가지고있는 단지 많은 프로세스를 사용하기 때문에 : 아래와 같이 이것은 if __name__ == '__main__'을 테스트함으로써 달성 될 수있다 코어 사용 가능).

+0

다음과 같은 오류를 제공합니다 : [2]에서 % 실행 -i test.py에게 스레드 스레드 3 예외 : 역 추적 (마지막으로 가장 최근 통화) : 파일 "은/usr/lib 디렉토리/python2를.self.run() 파일 "/usr/lib/python2.7/threading.py", 줄 505, 실행 중 self .__ target (* self .__ args, 7/threading.py ", 줄 552, __bootstrap_inner ** self .__ kwargs) _handle_tasks의 "/usr/lib/python2.7/multiprocessing/pool.py"파일, 342 줄 put (작업) PicklingError : 을 (를) 피할 수 없음> : 특성 조회 __builtin __. function failed –

+0

또한 파이썬 2.7을 사용하고 있습니다. 지금 수영장을 사용한 이유를 확인합니다. 전에는 데이터를 각 코어에 대해 하나씩 4 개의 "청크"로 분할했습니다. 감사! –

+0

오류는 이상합니다. 왜냐하면 내가 볼 수있는 한'number'와는 다른 것을 피하도록 강요해서는 안되기 때문입니다. 필자는 python2.7로 테스트했고, 매력처럼 작동합니다. 사실이 코드는 내 컴퓨터의 python3.4에서도 작동합니다. –

관련 문제