python线程:仅运行一个Python线程

时间:2018-06-27 11:58:58

标签: python multithreading opencv

我正在使用python和opencv处理网络摄像头,看来它在读取第一个和第二个之间是滞后的。所以我想用python线程来修复它。这是我的代码:

from cv2 import *
from threading import Thread, currentThread, activeCount
import numpy as np
webcam_address0="rtsp://192.168.1.109:6554/stream_0"
webcam_address1="rtsp://192.168.1.106:6554/stream_0"
cap0=VideoCapture(webcam_address0)
cap1=VideoCapture(webcam_address1)
count=0
flag_l=False
flag_r=False
def webcam0_read():
    global frame0
    global flag_l
    while 1:
        print('start reading l')
        ret0, frame0 = cap0.read()
        print('l done')
        flag_l=True
def webcam1_read():
    global frame1
    global flag_r
    while 1:
        print('start reading r')
        ret1, frame1 = cap1.read()
        print('r done')
        flag_r=True
t0=Thread(target=webcam0_read())
t0.setDaemon(True)
t0.start()
t1=Thread(target=webcam1_read())
t1.setDaemon(True)
t1.start()
while 1:
    print('ready to print!')
    if flag_l==True and flag_r==True:
        frame0=resize(frame0,(640,360))
        frame1=resize(frame1,(640,360))
        imshow("Video Stream0", frame0)
        imshow("Video Stream1", frame1)
        if waitKey(5) == 's':
            path0="~/images/"+str(count)+"l.jpg"
            path1="~/images/"+str(count)+"r.jpg"
            imwrite(path0,frame0)
            imwrite(path1,frame1)
        elif waitKey(5)==27:
            break

运行它时,我只得到如下结果:开始阅读l

我做完

开始阅读l

我做完

开始阅读l

我做完

似乎线程t1没有运行。而且它从不打印“准备打印!”。我该如何解决?非常感谢!

1 个答案:

答案 0 :(得分:2)

根据documentationOrderedDict构造函数的target参数是

  

由run()方法调用的可调用对象。默认为“无”,表示什么都不叫。

您正在传递Thread,这是不可调用的。您实际上正在调用webcam0_read()函数,该函数停留在其webcam0_read循环中,并且永不返回。其余代码甚至都没有执行。

while自变量更改为targetwebcam0_read

webcam1_read