0

スレッド化モジュールまたはマルチプロセッシング モジュールを PySpin と共に使用して、4 台の 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')

threading.Thread のすべてのインスタンスを multiprocessing.Process に置き換えると、コードは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