2012-10-23 7 views
0

파이썬 (2.6.6)에서 동시에 작업 (컴파일)을 수행하는 동안 스레드/프로세스가 네트워크 (메시지 대기열)를 검사하는 가장 좋은 방법은 무엇입니까? 메시지 큐 아래로 명령을 받으면 컴파일 스레드를 중지하고 생성 할 수 있어야합니다.파이썬 스레드 - 컴파일하는 동안 네트워크를 청취하십시오.

+0

어떤 OS입니까? 물건을 죽이는 데는 중요하다. –

+0

gnu/linux (debian). 실제 살인, 건물 및 메시지가 있습니다. 스레딩/멀티 프로 세스 im에 문제가 있습니다. –

답변

0

스레드를 죽이는 공식 Python API가 없습니다. OS 고유의 메소드를 사용해야합니다.

새 프로세스를 생성하는 경우 (multiprocessing.Process 사용) .terminate()으로 종료 할 수 있습니다. 물론 이것은 이것이 즉시 멈추게 할 것입니다 - 그 자체만으로는 정리되지 않을 것이고 공유 된 데이터 구조를 오염시킬 것입니다.

+0

프로세스가 성공적 일 때 콜백을받는 부분 –

+0

가장 쉬운 방법은 [Executor'] (http://docs.python.org/dev/library/concurrent.futures.html)를 사용하는 것입니다. 그들은 3.2 +에서 stdlib에 있지만 2.6+로 [backported] (http://pypi.python.org/pypi/futures) 왔습니다. 미래에 ['Future.add_done_callback'] (http://docs.python.org/py3k/library/concurrent.futures.html#concurrent.futures.Future.add_done_callback) 콜백을 등록하십시오. – katrielalex

0

앞서 언급했듯이 스레드를 죽이기위한 Python API는 없습니다. 다중 처리 또는 협업 설계 패턴을 사용해야합니다.

후자를 수행하려면 작업자 스레드가 주기적으로 죽여야하는지 확인하는 협업 디자인 패턴을 사용하면됩니다. 예 :

while not self.stopped: 
    do_come_compilation_stuff() 

기본 스레드에서 작업자 스레드에 대한 정지 플래그를 설정해야합니다. 이것은 프로그램이 CTRL-C와 같은 신호를 올바르게 처리하기를 원할 경우 유용한 디자인 패턴입니다.