0

我正在使用线程或多处理模块以及 PySpin 来记录来自四个 FLIR Blackfly S USB3 相机的图像。主摄像头通过“启动”硬件信号开始采集图像,3 个辅助摄像头与主摄像头图像捕获硬件同步。

使用此配置和下面的示例代码,每个线程都会在image_result = cam.GetNextImage()行等待图像可用。一旦开始信号到达,相机开始捕捉图像,线程抓取图像并无限期地运行。

threads = []
for camNum, cam in enumerate(cams):
    threads.append(threading.Thread(target = image_thread, args = (cam, camNum+1)))

for t in threads:
    t.start()
    time.sleep(1)
                    
    for t in threads:
        print('about to join')
        t.join()

def image_thread(cam, cam_num):
    record = True
    while record:
        try:
            print('about to grab for: ' + str(cam_num))
            image_result = cam.GetNextImage()
            print('image grabbed')

如果我用 multiprocessing.Process 替换 threading.Thread 的每个实例,代码会在image_result = cam.GetNextImage()处挂起,并且在开始信号到达时不会开始收集图像。在这两种情况下,在接收到启动信号之前的终端输出如下所示,表明所有 4 个线程/进程都已到达该行并正在等待信号:

about to grab for: 1
about to grab for: 2
about to grab for: 3
about to grab for: 4
about to join 

我想使用多处理,以便最终可以方便地终止进程。有没有人了解为什么相机在线程内而不是进程内工作时可以接收硬件信号并对其采取行动?

4

0 回答 0