2017-03-23 5 views
1

私はPythonでスレッドを使う方法を自分自身で教えようとしています。私は、わずか10秒後に永遠に数字の四角形を印刷し続ける関数を中断しようとするという基本的な問題を思いつきました。私は例としてこのウェブサイトを使用した:http://zulko.github.io/blog/2013/09/19/a-basic-example-of-threads-synchronization-in-python/。私が今行っているコードは意図したとおりに動作せず、あなたの誰かが私がそれを修正するのを助けることができるかどうか疑問に思っています。前もって感謝します!Pythonでのスレッドの基本的な例を修正する方法

import threading 
import time 

def square(x): 
    while 1==1: 
     time.sleep(5) 
     y=x*x 
     print y 

def alarm(): 
    time.sleep(10) 
    go_off.set() 


def go(): 
    go_off= threading.Event() 
    squaring_thread = threading.Thread(target=square, args = (go_off)) 
    squaring_thread.start() 
    square(5) 
go() 
+0

'threading.Thread(対象=正方形、引数=(go_off))':あなたはジャンFranç[email protected]数は正方形を計算するために期待されている機能... –

+0

を渡しているんでした私は代わりに何をすべきか説明していますか? threading.Thread(target = square(6)、args =(go_off))と置き換えると、プログラムは停止せずに無期限に36を出力し続けます。 –

+0

'threading.Thread(target = square(6))'はスレッド外のルーチンを呼び出します。それは古典です。私の答えを見てください。 –

答えて

2
import threading 
import time 
#Global scope to be shared across threads 
go_off = threading.Event() 

def square(x): 
    while not go_off.isSet(): 
     time.sleep(1) 
     print x*x 

def alarm(): 
    time.sleep(10) 
    go_off.set() 


def go(): 
    squaring_thread = threading.Thread(target=square,args = (6,)) 
    alarm_thread = threading.Thread(target=alarm , args =()) 
    alarm_thread.start() 
    squaring_thread.start() 
go() 
+0

もう一つのオプションは、関数への引数としてイベント(go_off)を渡すことです –

+0

ありがとう!あなたは素晴らしいです! –

関連する問題