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