2017-12-05 2 views
2

파이썬 3과 스레딩 중 일부는 동시에 두 가지를 실행합니다. 다음은 테스트 할 스크립트입니다.파이썬 스레딩은 1 루프 이후에 붙어 있습니다.

from threading import Thread 
import time as t 
x=1 
z=1 
var=0 
def firstFunction(): 
    global var 
    while x == 1: 

     var += 1 
     t.sleep(1) 
def secondFunction(): 

    while z == 1: 
      print(var) 
    t.sleep(1) 
add=Thread(target=firstFunction) 
see=Thread(target=secondFunction) 
add.start() 
see.start() 

나는 어떤 이유로 그것을 계산할 때 그것을 계산할 때 바로 계산합니까? 하지만 그것은 단지

1

을 말한다 오류를 종료하거나 말을하지 않습니다,하지만 난 스크립트 당신이 그것을 잘 작동하는 VAR를보고 싶다면 요청이있는 스크립트를 시도합니다. 어떤 식 으로든이 질문없이 일할 수 있나요? 다음은 묻는 코드입니다.

from threading import Thread 
import time as t 
x=1 
z=1 
var=0 
def firstFunction(): 
    global var 
    while x == 1: 
     var += 1 
     t.sleep(1) 
def secondFunction(): 

    while z == 1: 
      see1=input("See var? : ") 
      if see1 == "y": 
       print(var) 
      elif seel == "n": 
       print("ok") 
      else: 
       print("not option") 
add=Thread(target=firstFunction) 
see=Thread(target=secondFunction) 
add.start() 
see.start() 
+0

주 스레드는 다른 두 개를 시작한 직후 종료됩니다. '.join()'두 스레드! –

+0

어떻게 코드 조각에서 .join()을 사용할 수 있습니까? 나는 어디로 갈지 알 수 없다. – Matt

+0

'add.join(); see.join()'을 마지막 줄로 사용하십시오. –

답변

1

이와 같이 코드를 실행하면 주 스레드가 끝나고 두 자식 스레드가 시작된 후 바로 종료됩니다.

스레드가 완료 될 때까지 기다려야합니다. .join() 그렇게하고 그래서 당신은 단지 두 스레드가 완료 될 때까지 기다릴 것이다 당신을 programm

add.join() 
see.join() 

메인 스레드를 종료 바로 이러한 라인을 추가합니다.

불필요한 스레드 및 조인의 집합이 교착 상태가 될 수 있다는 점에 유의하십시오.