我正在处理视频,并希望每隔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
现在我无法确定所有区域是否正在并行处理(尽管我知道它们都在处理中)。与我有意识地检查区域的方式相比,这个程序在这里运行得相当慢。所有地区的处理不必同时开始。
答案 0 :(得分:1)
是的,此代码似乎每5秒并行启动N个线程,但是,由于Python global interpreter lock,它可能比检查N个区域的单个线程执行速度更快。
答案 1 :(得分:0)
您目前正在为每次迭代创建6个新线程(1 checkFrames
和5 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()
此代码假定processRegion
调用不到5秒。