2013-03-25 3 views
0

스레드는 파이썬에서 어떻게 구현됩니까? 파이썬은 각 스레드에 대해 별도의 프로세스를 생성합니까?파이썬에서 스레딩 - 스레드 또는 프로세스?

이 코드를 고려하십시오. 그러나 "내부 스레드", 쉘에이 코드를 실행 한 다음 Ctrl + C은 "스레드 외부"인쇄가 오는 중지 일을

from threading import Thread 
from time import sleep 


class testThread(Thread): 
    def __init__(self): 
     Thread.__init__(self) 
    def run(self): 
     while True: 
      print "Thread inner!" 
      sleep(5) 
threadTest = testThread() 
threadTest.start()  
while True: 
    print "Thread outer!" 
    sleep(10) 

내가 수동으로 사용하여 죽일 때까지 인쇄되는 계속 '죽일 -9 pid '명령을 사용하십시오.

+1

스레드를 '데몬'으로 설정하십시오. – JBernardo

답변

1

각 스레드는 Linux에서 별도의 프로세스가 아니라 스레드입니다. ps을 사용하면 스크립트가 실행 중일 때 실행되는 프로세스를 볼 수 있으며 단일 파이썬 프로세스가 표시됩니다. threading module 참고

워드 프로세서 :

스레드는 "데몬 스레드"것으로 표시 할 수 있습니다. 이 플래그의 의미는 데몬 스레드 만 남아있을 때 전체 Python 프로그램이 종료된다는 것입니다. 초기 값은 작성 스레드에서 상속됩니다. 플래그는 daemon 등록 정보를 통해 설정할 수 있습니다.

...

"주 스레드"개체가 있습니다. 이것은 파이썬 프로그램에서 초기 제어 스레드에 해당합니다. 이것은 데몬 스레드가 아닙니다.

모든 파이썬 프로그램은 데몬이 아닌 모든 스레드 (메인 스레드 포함)가 종료 될 때만 종료됩니다.

+0

감사합니다! 그게 효과가 있었어. – CPS

1

스레드는 별도의 프로세스가 아닙니다. 그것들은 주 스레드와 동일한 자원을 공유합니다. 파이썬은 모든 스레드가 종료되기 전에 실행을 마칠 때까지 기다리는 것입니다.

주 프로세스가 종료 된 후에 파이썬을 종료하려면 daemonize 다른 모든 스레드. 다음과 같이이 작업을 수행 할 수 있습니다.

... 
threadTest.daemon = True 
threadTest.start() 
... 

매우 기본적인 스레드에서 작동합니다. 그러나 위에 링크 된 문서에 따르면 :

데몬 스레드는 시스템 종료시 갑자기 중지됩니다. 파일 (예 : 열린 파일, 데이터베이스 트랜잭션 등)의 리소스가 제대로 해제되지 않을 수 있습니다. 스레드를 정상적으로 중지 시키려면 데몬 스트가 아닌 스레드로 만들고 이벤트와 같은 적절한 신호 메커니즘을 사용하십시오.

관련 문제