我是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()
我期望两个线程都可以执行,但是只有第一个线程可以执行。
答案 0 :(得分:0)
使用U1.start()
和VF.start()
代替run
。
run
在不启动新线程的情况下执行代码,因此程序陷入了while
循环中。
start
启动一个线程并在其中执行run
。两个线程同时运行。