python 使用子进程时,终端打印的数据和输出到文件的数据不一样。
python -m src.camera_process<class 'NoneType'>
python -m src.camera_process > useless.txt1628206303.0536883
测试程序
# -*- coding: utf-8 -*- import multiprocessing from multiprocessing import Process, Queue import time import sys if '/opt/ros/kinetic/lib/python2.7/dist-packages' in sys.path: sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages') import cv2 class CameraProcess(): def __init__(self, i_cam): try: self.capture = cv2.VideoCapture(i_cam) self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640) self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) except Exception as e: print("Exception:", e) self.image = None self.loop_read_process() def loop_read_process(self): # Child process manager = multiprocessing.Manager() self.queue_main_to_capture = manager.Queue() self.queue_capture_to_main = manager.Queue() Process(target=self.loop_read, args=(self.queue_main_to_capture, self.queue_capture_to_main)).start() def loop_read(self, queue_main_to_capture, queue_capture_to_main): while 1: ret, frame = self.capture.read() assert ret print(time.time()) queue_capture_to_main.put(frame) def get_image(self): return self.image def release(self): try: self.capture.release() except Exception as e: print("Exception:", e) def main(): camera_process = CameraProcess(1) queue_recv = None while 1: while not camera_process.queue_capture_to_main.empty(): queue_recv = camera_process.queue_capture_to_main.get(True) im = queue_recv print(type(im)) time.sleep(0.1) if __name__ == '__main__': main()
墨之科技,版权所有 © Copyright 2017-2027
湘ICP备14012786号 邮箱:ai@inksci.com