2017-12-05 5 views
2

Python 3でいくつかのスレッドで同時に2つのことを実行していました。 これは私がテストしていたスクリプトです。Pythonスレッドが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() 

何らかの理由で私がそれを実行したときにカウントアップするのが正しいでしょうか? それだけ

を言うと、終了またはエラー言うが、あなたはそれが正常に動作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

メインスレッドは、他の2つを開始した直後に終了します。 '.join()'は2つのスレッドです! –

+0

どうすれば私のコードで.join()を使うことができますか?どこに行くのかわかりません。 – Matt

+0

'add.join(); see.join() 'を最後の行として使用します。 –

答えて

1

このようにコードを実行すると、メインスレッドは最後に到達し、両方の子スレッドを開始した直後に終了します。

スレッドが完了するまで待つ必要があります。 .join()はそれを行いますので、あなただけの両方のスレッドが終了するまで待機しますあなたのあなたのプログラムの開発

add.join() 
see.join() 

とメインスレッドを終了し、非常にこれらの行を追加します。

スレッドや結合の不運な配置がデッドロックにつながる可能性があることに注意してください。

関連する問題