2017-09-03 20 views
1

私のスレッドの外側に変数aを使いたいと思います。この例では、 "update()"が実行されるたびにプログラムが "a"を印刷することを期待していました。私は "a"を一度だけ印刷することができましたが、それはそれでした。毎秒 "更新"が表示されるので、スレッドが正常に動作していることがわかりましたが、スレッドの内容を取得できません。どうして?なぜ私はスレッドの外で一度だけグローバル変数を使用することができますか?

import threading 

a = 1 

def update(): 
global a 
a += 1 
print ("updating") 
threading.Timer(1, update).start() 

update() 
print(a) 

私は、スレッド自体の外にスレッドを開始するいくつかのコードを見た:

def update(): 
global a 
a += 1 
print ("updating") 

threading.Timer(1, update).start() 
update() 

をしかし、私はそれがちょうど私の場合には動作しないだろう、という試みました。私は「更新」は2回だけ印刷されます。私はそれがあなたが各呼び出しの終わりにスレッドを再起動できるように関数内にあるべきだと思います。正しい?

また、変数を正しく宣言していないのですか?

+1

最初のバージョンでは、「a」を1回だけ印刷します。なぜそれが複数回出力されるべきだと思いますか? –

+0

2番目のスニペットでは、「更新」のみを印刷しています。なぜ他のものを印刷すると思われますか? – alfasin

+0

@DanielRoseman Alright。私はArduinoの世界から来ています。私は誤ってコードの残りの部分がループを繰り返すだけであると予想していたので、print(a)は一度だけ呼び出されました。私は参照しています –

答えて

1

コードの最初のブロックでは、aという値を1回だけ印刷します。しかし、あなたのスレッドはそれを更新し続けます。

代わりにちょうどprint(a)のあなたのコードの末尾に

は、このように、ループ内で aを印刷してみてください:あなたがこれを行うと

import threading,time 

a = 1 

def update(): 
    global a 
    a += 1 
    print ("updating") 
    threading.Timer(1, update).start() 

update() 
while True: 
    time.sleep(5) 
    print(a) 

、あなたはaが更新されていることがわかりますし、あなたができることスレッドの外側にその値にアクセスします。

関連する問題