使用Python每5秒并行运行一个函数

时间:2017-03-29 17:15:23

标签: python multithreading python-3.x

我正在处理视频,并希望每隔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

现在我无法确定所有区域是否正在并行处理(尽管我知道它们都在处理中)。与我有意识地检查区域的方式相比,这个程序在这里运行得相当慢。所有地区的处理不必同时开始。

2 个答案:

答案 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秒。