3

私はスレッディング初心者です。何かの重さを量るスレッドとして関数を実行しようとしています。別のスレッドは、重みが適切であることを確認し、重みが適切でない場合は両方のスレッドをシャットダウンします。これはビーグルボーンブラックで実行されていますが、おそらく関係ありません。簡単にするために、同じような望ましくない動作を生成するコードをここに含めますが、簡略化しています。

from time import sleep
import threading
import Queue
import random

exitFlagMass = 0
exitFlagWD = 0
mass = None
random.seed()

class massThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
        #self.mass = None
    def run(self):
        global mass
        print "Starting " + self.name
        mass = massfunc(self.name)
        print "Exiting " + self.name

def massfunc(threadName):
    global exitFlagMass
    global mass
    while 1:
        sleep(2.5)
        print "exitFlagMass = "+str(exitFlagMass)
        if exitFlagMass:
            print "thread mass exiting"
            thread.exit()

        mass =  random.random()*6
        print str(mass)+" kg"

def wdfunc(threadName):
    global exitFlagWD
    global exitFlagMass
    global mass
    while 1:
        #threadLock.acquire()
        print "exitFlagWD = "+str(exitFlagWD)
        if exitFlagWD:
            print "thread wd exiting"
            thread.exit()

        if mass > 4.5:
            print "greater than"+ str(4.5)+" kg"  
            exitFlagMass = 1
            exitFlagWD = 1
        #threadLock.release()
        sleep(0.25)

class watchdogThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
        self.masslimit = 4.5 #max kg weight

    def run(self):
        print "Starting " + self.name
        wdfunc(self.name)
        print "Exiting " + self.name   


def main():


    # Create new threads
    weighthread = massThread(1, "weighthread-1", 1)
    wdthread = watchdogThread(2, "wdthread-2", 1)

    # Start new Threads
    wdthread.start()
    weighthread.start()


    return 0    


if __name__ == '__main__':
    main()

ここでの問題は、wdthread が開始されないことです。簡単な説明があることを願っています。スレッド化クラスが 2 つあるからですか? もしそうなら、どうすれば1つのスレッドクラスだけでこれを行うことができますか.

ご協力いただきありがとうございます。

敬具

マット

4

1 に答える 1

1

あなたはとても早く帰ってくると思います。

wdthread.join() # wait till the thread finishes
weighthread.join() # wait till the thread finishes

return 0

これはあなたの問題です。

于 2013-11-11T09:15:15.213 に答える