2017-09-26 1 views
0

스레드를 사용하여 파이썬 스크립트에 문제가 있습니다. 나는 다음과 같은 코드를 사용하여 문제를 모방 수 : 나는 Ctrl 키를 +와 스크립트 C을 방해하거나 그것의 끝에 도달하면, func1()를 실행하는 스레드가 멈추지 않을 때파이썬 - 간단한 스레드가 중지되지 않습니다

from threading import Thread 

def func1(): 
    while True: 
     print 'Function 1' 

def main(): 
    t = Thread(target = func1) 

    t.start() 

    for i in xrange(100000): 
     print 'Main' 

    t.stop() 

    print 'End' 

if __name__ == '__main__': 
    main() 

문제입니다.

터미널을 열고 killall python을 실행하는 경우에만 실행을 중단 할 수 있습니다.

파이썬에서 스레드로 작업하는 것은 이번이 처음입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

Ctrl + C는 python2에서 스레드를 중지하지 않습니다. 'Thread (target = func1, daemon = True) '를 사용하여't'를 데몬 스레드로 만드는 것을 권장 할 수 있습니다. –

+0

그것은 효과가있었습니다. 나는't.dameon = True'를 시작하고't.start()'를 시작하기 전에 데몬으로 만들어야했습니다. 감사합니다 @ cᴏʟᴅsᴘᴇᴇᴅ! –

+0

나는 생성자 호출 중에 초기화 할 수 있다는 인상을 받았다. –

답변

1

내 접근 (아닐지도 모르겠지만 최선을하지만, 작동)입니다 :

  1. 그것을 중지해야하는 경우 스레드 여부를 확인 할 수있는 변수가.
  2. 주 기능에서 ctrl-c를 찾습니다.
  3. catch 될 때 main 함수는 스레드가 중지되어야 함을 나타내는 변수를 설정합니다.
  4. 주 함수가 완료 될 때까지 기다리는 스레드에서 join()을 호출합니다.
  5. 스레드는 변수를 검사하여 변수가 설정되어 있는지 확인한 다음 반환합니다 (중지).
  6. join()이 반환되고 주 기능을 종료 할 수 있습니다.
관련 문제