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