2016-06-01 5 views
1

実行中のスレッド内の変数を更新するにはどうしたらいいですか?そのような変数に基づいて無限ループですか?
私が試したことの単純化されたバージョンは、次の結果であり、もちろん結果はありません。ポインタが見つかりません。python - スレッド変数を更新する

import some_module as mod 
import threading 

class thr (threading.Thread): 
    NUM = 5 # set a default value to start the script 
    def run (self): 
     mod.NUM = NUM 
     mod.main_loop() 

try: 
    thr().start() 
    time.sleep(1) 
    thr().NUM = 2 
    time.sleep(1) 
    thr().NUM = 6 
    time.sleep(1) 
    thr().NUM = 8 

答えて

1

問題は、あなたが(すなわち、インスタンス化)thrを「コール」するたびに新しいスレッドを作成しているということです。コードを

t = thr() 
t.start() 
time.sleep(1) 
t.NUM = 2 
time.sleep(1) 
t.NUM = 6 
time.sleep(1) 
t.NUM = 8 
time.sleep(1) 
+0

残念ながら、無限ループ内の変数を更新しません。 – nxet

+0

スレッドオブジェクトインスタンスの 'NUM'変数を更新します。' mod.NUM'を更新するには 'mod.NUM = 2' ...等 – 6502

+0

これまで私が得たことは、私の問題は、更新された変数が無限ループに供給されていないということです。 – nxet

0

に変更してください。変更NUM変数にキューを使用してみてください。ここ

https://docs.python.org/2/library/queue.html

チェック例:

https://pymotw.com/2/Queue/

は、一般的にキューをspeakinigあなたは、スレッド間でデータを送ることができます。キューからデータを取得する場合はget()、キューに入れる場合はput()を使用します。

+0

私は限られた言語知識しか持っていないので、あまりに一般的すぎると思います。あなたはこれについてもっと詳しく教えていただけますか?おかげでたくさんの – nxet

+0

2番目のリンクが役立った方法でした。毎回新しいスレッドを強制終了して強制的に生成すると仮定するのは間違っていますか? – nxet

+0

@nxet私は理解できません:)どういう意味ですか?「毎回新しいスレッドを強制終了して強制終了しますか? – MartinP

関連する問題