我程序中的第二个线程未执行

时间:2019-05-31 20:06:09

标签: python multithreading

我是python的初学者。我在程序中学习并应用了多线程,但是仅执行了一个线程。

该程序与调用函数有关,该函数使用超声波传感器返回距离值,并使用时间戳保存来自网络摄像头的视频帧。我尝试了不使用线程的代码,它可以正常工作,但是由于距离测量花费的时间减少了帧数,因此我认为可以使用python中的多线程并行执行它们。

import threading
import thread
video = cv2.VideoCapture(0)
class u1Thread(threading.Thread):
      def run(self): 
         TRIG1=23                            #Associate pin 23 to TRIG
         ECHO1=24                            #Associate pin 24 to ECHO
         GPIO.setup(TRIG1,GPIO.OUT)          #Set pin as GPIO out
         GPIO.setup(ECHO1,GPIO.IN)           #Set pin as GPIO in
         U_1=[]
         start=[]
         while True:
            d=ultrasonic(TRIG1,ECHO1)
            U_1.append(d)
            start.append(str(time.time()))
            x=pd.DataFrame({'1st':U_1,  'Time Stamp':start})
            export_csv = x.to_csv (r'/home/pi/q.csv', index = None, 
            header=True)


 class vfThread(threading.Thread):
       def run(self):
       ret, frame=video.read()
       if ret == True:  
          cv2.imwrite(str(time.time()) + '.jpg',frame)   


U1=u1Thread()
VF=vfThread()


U1.run()
VF.run()  

我期望两个线程都可以执行,但是只有第一个线程可以执行。

1 个答案:

答案 0 :(得分:0)

使用U1.start()VF.start()代替run

run在不启动新线程的情况下执行代码,因此程序陷入了while循环中。

start启动一个线程并在其中执行run。两个线程同时运行。