2017-03-29 24 views
0

私はビデオを処理していて、複数の関心領域を5秒ごとに並行してチェックしたいと考えています。私が現在持っている機能が正しい方法でこれを達成しているかどうかを知りたい。 (私は彼らがすべて処理されていることを知っているが)領域の全てが並列に処理されている場合Pythonで5秒ごとに各項目の関数を実行します

def checkFrames(): 
    timer = threading.Timer(5.0, checkFrames) 
    timer.daemon = True 
    timer.start() 
    if(started): 
     index = 0 
     for region in regions: 
      threading.Thread(target=processRegion, args=(frame, region, index)).start() 
      index += 1 

は今、私は本当に言うことができません。このプログラムは、私が故意に他の領域の後ろを意図的にチェックしているときと比較して、ここでかなり遅く走ります。すべての領域の処理を同時に開始する必要はありません。

答えて

1

はい、このコードは5秒ごとにN個のスレッドを並列に起動するようですが、Pythonのglobal interpreter lockのためにN個の領域を調べる単一のスレッドより速く実行することはできません。

+0

スレッドではなく複数のプロセスを起動する機能を変更することが、これが問題だったらどうするのでしょうか? –

+0

はい。 Pythonのマルチプロセッシングライブラリを見てください:https://docs.python.org/2/library/multiprocessing.html?highlight=multiprocessing#module-multiprocessing –

0

現在、繰り返しごとに6つの新しいスレッドを作成しています(1 checkFramesおよび5 processRegion)。スレッドを作成することは時間とリソースを消費します。私は何を示唆することは、このコードはprocessRegionコールが5秒未満かかることを想定し、各5秒ごと

def checkFrame(frame, region, index): 
    while True: 
     start_time = time.time() 
     processRegion(frame, region ,index) 
     sleep(5 - time.time() - start_time) 
for region in len(regions): 
    threading.Thread(target=checkFrame, args=(frame, region, index)).start() 

を処理する5つのスレッドを作成することです。

+0

どこからprocessRegionの5つのスレッドを取得していますか? –

関連する問題