python 使用子进程时,终端打印的数据和输出到文件的数据不一样

python 使用子进程时,终端打印的数据和输出到文件的数据不一样。

python -m src.camera_process
<class 'NoneType'>
<class 'NoneType'>
<class 'NoneType'>
1628206250.643264
1628206250.671464
<class 'numpy.ndarray'>
1628206250.7079256
1628206250.7394052
1628206250.7718093
<class 'numpy.ndarray'>
1628206250.8073459
1628206250.8398552
1628206250.876437
<class 'numpy.ndarray'>
1628206250.9077957
1628206250.9393284
1628206250.9760048
1628206251.007391
<class 'numpy.ndarray'>

python -m src.camera_process > useless.txt
1628206303.0536883
1628206303.0872662
1628206303.1196485
1628206303.1512353
1628206303.187653
1628206303.2192817
1628206303.2516365
1628206303.287283
<class 'NoneType'>
<class 'NoneType'>
<class 'NoneType'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>


测试程序

# -*- 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