Python-带函数的多处理

Python-带函数的多处理,python,multiprocessing,python-multiprocessing,python-multithreading,Python,Multiprocessing,Python Multiprocessing,Python Multithreading,我对Python和计算机视觉相当陌生,但我已经设法设置了一个基本脚本,在家里打开我的闭路电视摄像机。它工作得很好,但我有一个小问题,就是它一个接一个地在每个摄像头上循环,所以它不是每秒更新一次摄像头图像,而是大约每5秒更新一次,这是完成循环所需的时间 我想要的是能够使用多处理/多线程,这样当我为我的每个相机调用函数时,它会在一个新的池中打开,彼此并行运行,因此每秒钟更新一个相机 正如您在下面的代码中所看到的,我使用相同的函数调用每个摄影机,但使用不同的参数。我已经阅读了过程,并尝试了一些变体,但

我对Python和计算机视觉相当陌生,但我已经设法设置了一个基本脚本,在家里打开我的闭路电视摄像机。它工作得很好,但我有一个小问题,就是它一个接一个地在每个摄像头上循环,所以它不是每秒更新一次摄像头图像,而是大约每5秒更新一次,这是完成循环所需的时间

我想要的是能够使用多处理/多线程,这样当我为我的每个相机调用函数时,它会在一个新的池中打开,彼此并行运行,因此每秒钟更新一个相机

正如您在下面的代码中所看到的,我使用相同的函数调用每个摄影机,但使用不同的参数。我已经阅读了
过程
,并尝试了一些变体,但似乎无法使其正常工作

我相信这很简单,如果有人能给我指出正确的方向,那就太好了

代码如下:

# import libraries
from threading import Thread
import imutils
import cv2, time
import argparse
import numpy as np
import datetime
from imutils.video import WebcamVideoStream
from multiprocessing import Process


stream = WebcamVideoStream('rtsp://mylink1./' ).start() # To open any valid video file stream/network stream. In this case 'test.mp4' file.
stream2 = WebcamVideoStream('rtsp://mylink2./' ).start()
stream3 = WebcamVideoStream('rtsp://mylink3./' ).start()
stream4 = WebcamVideoStream('rtsp://mylink4./' ).start()
stream5 = WebcamVideoStream('rtsp://mylink5./' ).start()


def checkimage(stream,camname):

    global lastmessage

    try:
        frame = stream.read()

        (h, w) = frame.shape[:2]

        cv2.imshow(camname, frame)

        print('[INFO]Checked ' + str(camname) + ' at ' +  datetime.datetime.now().strftime("%H:%M:%S")  + '...')

    except AttributeError:
        pass

# infinite loop
while True:

    checkimage(stream,"Back Door Camera")
    checkimage(stream2,"Conservatory Camera")
    checkimage(stream3,"Front Door Camera")
    checkimage(stream4,"Garage Camera")
    checkimage(stream5,"Shed Camera")

    key = cv2.waitKey(1) & 0xFF

    # check for 'q' key-press
    if key == ord("q"):
        if 'q' key-pressed break out
        break

cv2.destroyAllWindows()
# close output window

stream.stop()
# safely close video stream.
提前谢谢! Chris

的可能副本似乎已经使用多个线程来读取帧。你确定它只是每5秒循环一次,还是仅仅连续5次获得相同的帧?也许插入一些打印或计时语句来了解它在做什么