Jetson NANO 上的多处理

Multiprocessing on Jetson NANO

我正尝试在 Jetson NANO 设备上 运行 一个简单的多处理系统,使用 Jetpack 4.5 刷新。 我正在做我通常在计算机上做的事情,所以我有一个主脚本,launcher.py

launcher.py

import multiprocessing as mp
from multiprocessing import set_start_method, Queue, Event
from camera_reader import Camera_Reader_Initializer

def main():
    set_start_method("spawn")
    cam_read = mp.Process(target=Camera_Reader_Initializer, args=())
    cam_read.daemon = True
    cam_read.start()

if __name__ == "__main__":
    main()

应该启动脚本 camera.py(实际上,连同其他几个脚本) camera.py:

camera.py

print("check 00")

def Camera_Reader_Initializer():
    print('check 01')
    cam_read = Camera_Reader()
    cam_read.run()


class Camera_Reader():
    def __init__(self):
        print('check 02)
        self.source = "/dev/video0"

    def run(self):
        print('check 03')
        input = jetson.utils.videoSource(self.source)
        output = jetson.utils.videoOutput("")
        while output.IsStreaming():
            image = input.Capture(format='rgb8')
            output.Render(image)
            output.SetStatus(f"Video Viewer | {image.width:d}x{image.height:d} | {output.GetFrameRate():.1f} FPS")

然而,当 运行ning launcher.py 我得到的唯一输出是:

check 00

因此,基本上 cam_read 对象未创建或 运行。我做错了什么吗?

设置Process.daemon = True的功能会导致主进程在退出时调用Process.terminate()。这意味着长时间 运行ning child 进程可以在没有警告的情况下处理关闭(通常你应该在退出前处理 SIGTERM 信号进行清理)。

您在“launcher.py”中的主要功能不会等待 child 执行任何操作,并且基本上会立即退出。 child 似乎有足够的时间在它被杀死之前到达 print("check 00") 行。这可能看起来有些一致,但即使打印出来也不应该指望它。这是一场 child 在主进程开始关闭之前可以完成多少的竞赛。

解决这个问题取决于您希望它如何运作。如果您仍然希望 child 永远在后台 运行 直到主进程退出,您需要确保主进程需要一些时间(可能 time.sleep)。如果 child 正在完成一些有限的工作,它可能不应该是一个守护进程,你应该调用 Process.join() 等待它在 main() 的某个时间点完成。 =17=]