2014-02-14 2 views
1

정보를 앞뒤로 보내는 대기열을 사용하여 프로세스를 시작하는 프로그램을 실행 중입니다. 나는 (프로세스에서 서브 클래 싱 된) 클래스를 윈도우에서 시작할 수 없다. (리눅스에서 작동한다.) 코드의 단순화 된 버전은 다음과 같습니다프로세스 하위 클래스를 창에서 실행할 수 없습니다.

from multiprocessing import Process, Queue 

class Client(Process): 
    def __init__(self, q): 
     super(Client, self).__init__() 
     self._q = q 

    def run(self): 
     self.startClient() 

    def startClient(self): 
     self._q.put('abc') 

class Other(object): 
    def start(self): 
     self.q = Queue() 
     self.client = Client(self.q) 
     self.client.start() 

과정 (클라이언트) 시작은 '실행'을 발생하지 않습니다 (따라서 startClient)를 호출 할 수 있습니다.

주된 진입 점 (__name__ == '__main__')을 사용하는 것이 간단한 해결책이지만, 이것은 더 큰 프로그램의 일부이며 해당 진입 점을 통해 액세스되지 않습니다.

Windows에서이 기능을 사용할 수있는 다른 방법이 있습니까?

+0

프로세스를 실행하기 위해 어떤 코드를 사용하고 있습니까? – BrenBarn

+0

큰 프로그램의 기본 모듈에는 무엇이 있습니까? 오랜 시간 일을하지 않아도 수입 될 수 있습니까? –

+0

@BrenBarn : '기타'를 여러 클래스 (처리 대기열 설정의 데이터 포함)로 처리하는 더 큰 클래스로 사용하는 경우. '기타'클래스는 더 큰 시스템에서 많은 클래스 중 하나입니다. – PeteOopNorf

답변

0

주요 모듈이 if __name__ == '__main__':를 사용하지 않는 당신이 그것을 변경하지 않으려면, 새로운 주를 실행하여 응용 프로그램을 다음과 같이 오래 된 주요 수입 새로운 메인 모듈을 만들고 실행 :

if __name__ == '__main__': 
    import main_module 
+0

늦은 응답을 기다립니다. 문제는 우리가 사용하는 개발 환경, 사내 설치와 관련이있는 것 같습니다. 그러나 나는 당신이주는 해결책이 맞다는 것을 확신합니다 :). – PeteOopNorf

관련 문제