2014-05-14 6 views
3

다중 처리를 별도의 파이썬 모듈로 제한 할 수 있는지 궁금합니다. 나는 그래서 멀티 프로세싱과 파이썬 모듈이있는 경우 예를 들어, : 예가져온 모듈을 사용한 다중 처리

#Call from another script 
import example 
example.f(q, a) 
>>> 'Yes' #Confirmation that multiprocessing was used 
+0

필자 시작 인수가 F로 명령 줄에서 구문 분석 스크립트를 서브 프로세스 호출을 사용하여 생각 함수 (모듈은 __main__이 실행 된 것처럼 동작합니다) 그러나 배열, 목록 등과 같이 더 복잡한 객체를 보내거나 받아들이 기가 어려워졌습니다. – kezzos

답변

3

:

#example.py 
def f(q, a, m='No'): 
    print m 
    q.put(a) 

if __name__ == '__main__': 
    a = '123' 
    m = 'Yes' 
    q = Queue() 
    p = Process(target=f, args=(q, a, m)) 
    p.start() 
    print q.get() 
    p.join() 

은 여전히 ​​멀티를 유지하면서, 가져 오기를 사용하여 모듈과 같은 다른 스크립트에서이를 사용하는 어쨌든 거기 클래스 또는 함수를 만들어이 작업을 수행 할 수 있습니다. 둘 중 하나를 다른 스크립트로 가져올 수 있습니다.

# example.py 
from multiprocessing import Process 

class Example(object): 
    def __init__(self, queue): 
     """ 
     @type queue: multiprocessing.Queue 
     """ 
     self.q = queue 

    def run(self, a, m=None): 
     p = Process(target=self.f, args=(a, m)) 
     p.start() 
     print self.q.get() 
     p.join() 

    def f(self, a, m='No'): 
     print m 
     self.q.put(a) 

이 그런 다음 예에서 가져 : 여기 는 클래스 예입니다

>>> from multiprocessing import Queue 
>>> from example import Example 
>>> q = Queue() 
>>> e = Example(q) 
>>> e.run('123', m='Yes') 
Yes 
123 
+0

감사합니다! – kezzos

+1

윈도우에 __name__ == '__main__'을 추가해야하는 것을 어떻게 처리합니까? – camdenl

관련 문제