Queue使用 注意

import cv2
import Queue
import threading
import time

class PhotoTaker(object):
    def __init__(self, cam_NO=0):
        cap = cv2.VideoCapture(cam_NO)
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
        cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
        cap.set(cv2.CAP_PROP_FPS, 30)
        self.cap = cap
        self.photoQueue = Queue.Queue(maxsize=10)
        self.th = threading.Thread(target=self._photo_worker)
        self.th.setDaemon(True)
        self.th.start()

    def _photo_worker(self):
        while True:
            ret, frame = self.cap.read()
            if ret:
                self.image = frame
                if self.photoQueue.full():
                    self.photoQueue.get()
                self.photoQueue.put(frame,)
            time.sleep(0.001)

    def get_photo_detect(self):
        return self.image
    def get_photo(self):
        return self.photoQueue.get()

在主进程中新建一个PhotoTaker实例i,新建一个线程A,A中调用i.get_photo(),会有阻塞的情况

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 5,137评论 0 23
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,438评论 1 14
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 1,704评论 0 12
  • 终端中刷新DNS的discovoryutil命令在macOS 10.10.4中被移除,在macOS 10.12之后...
    Lucaziki阅读 19,106评论 2 4