2014-06-17 3 views
0

이 코드를 가지고 :스레드를 다시 시작할 수 있습니까?

def runner1(): 
    os.system('python something.py') 
..... and so on 
thread_run_1 = threading.Thread(target=runner1, args=[]) 
.... 
i =0 
j = 0 
while i < 2: # i want to run continuously, dont want to use cron jobs 
    print "while 1" 
    #i made it simpler, but here are a lot of checks 
    while j == 0: 
     print "while 2" 
     thread_run_1.start() 
     ...... 
     time.sleep(3600) 
     break 
    print "back to while 1" 
    i+=1 
    print i 

그것은이 오류를 방지 할 수있다 : RuntimeError: threads can only be started once를?

+0

왜 새 스레드를 만들 수 없습니다와 같은 구조라고 생각하지 않는다 자바보다 Runnable 또는 callables 비슷한을 찾기 위해 노력하는 경우? – bereal

+0

@bereal True. 하지만 코드에서 직접 가능한지 알고 싶었습니다. – MikeT

+1

"코드에서 직접"의미하는 것은 무엇입니까? 코드에서 직접 새 스레드를 만듭니다. 파이썬 스레드는 OS 스레드 주변의 씬 래퍼이므로 스레드가 중지되면 더 이상 존재하지 않습니다. 생명의 베레모는 평화롭게 휴식을 취합니다. 그것은 전 스레드입니다. 새 것을 시작하십시오. – bereal

답변

1

스레드 개체를 인스턴스화하기 전에 isAlive을 통해 확인하여이를 방지 할 수 있습니다. 맞춤법은 버전에 따라 다릅니다. Relevant doc here.

1

왜 스레드를 다시 시작 하시겠습니까? 생성자가 worker 인수를 얻게 될 것이므로, 그 스레드에서 실행될 유일한 것이 논리적인 것 같습니다. 원하는 작업이 다른 정보를 처리하거나 작업을 다시 실행하도록 목표를 트리거하는 경우 다음을 수행 할 수 있습니다.

a) 다른 스레드를 빌드하고 실행합니다 (메모리가 얼마나 비싸는지 모르겠 음).)

b) 대상을 Queue 개체에 대한 참조를 얻고 처리 할 정보를 주 스레드에서 전달하도록합니다.

당신은 내가 파이썬 제공

관련 문제