2017-02-02 9 views
0

スレッドを呼び出すPython 2.7で記述されたスクリプトがあります。しかし、私が何をしても、スレッドは関数を呼び出さないでしょう。スレッドは関数(Python)を呼び出さない

それが呼び出す関数:

def siren_loop(): 
    while running: 
     print 'dit is een print' 

私はそれを呼び出すことを試みた方法:

running = True 
t = threading.Thread(target=siren_loop) 
t.start() 

か:

running = True 
thread.start_new_thread(siren_loop,()) 

私も見にsiren_loopする引数を追加してみましたそれはうまくいくが、変化はない。私はsiren_loop関数の行を表示することができません。

私はまた、明らかにうまくいかなかった多くの奇妙なものを試しました。私は間違って何をしていますか?

編集:人々はそれが働いていたので、別の機能からスレッドを呼び出そうとしました。だから、このようなものに見えた:

def start_sirene(): 
    running = True 
    t = threading.Thread(target=siren_loop) 
    t.start() 

をし、その部分が呼び出された:

if zwaailichtbool == False: 
     start_sirene() 
     print 'zwaailicht aan' 
     zwaailichtbool = True 
     sleep(0.5) 

はたぶんそれが問題を引き起こす可能性が? 最後のprintステートメントが機能し、スレッドステートメントの前後に印刷を追加したときにも機能しました。

+0

私はちょうどあなたがそれを呼び出そうとしたときの方法でコードを試してみました。あなたのステートメントを 'siren_loop'に連続して表示しました。だから私は問題が何であるか分かりません。 – tmwilson26

+0

また、QPythonを使用して検証済みです。あなたのコードは問題ありません。 – Carcigenicate

+0

残りのコードを少し入れて質問を編集しました。 – Noralie

答えて

1

これで、何時間も何時間も試してみたところ、解決策は見つかりましたが、それでも問題は理解できません。

明らかに、プログラムは多くのステップのようなものではありませんでした。私は一歩を踏み出しました(サイレンの始まりの方法)が、まったく同じコードを使用しました。突然それが働きました。 Stlはそれがなぜ問題であったのか分かりません。もし誰かが知っているなら、私に教えてください。xD

0

runningは、コード内のローカル変数です。 Add global runningstart_sirene()

+0

これは私が思ったが、これはOPに "未定義の"エラーを与えていないだろうか? – Carcigenicate

+0

おそらくどこかで実行されているグローバルを初期化しました。 – Udi

+0

これは問題ではありません。実行はコードの始めに初期化され、正常に動作します。 – Noralie

0

私にとってはうまくいっています。また、thread_functionのキーワード引数として実行を指定することもできます。

import threading 

def siren_loop(running): 
    while running: 
     print 'dit is een print' 

t = threading.Thread(target=siren_loop, kwargs=dict(running=True)) 
t.start() 
関連する問題