Python多处理—mp.Pool.join花费的时间越来越长

Python多处理—mp.Pool.join花费的时间越来越长,python,multiprocessing,Python,Multiprocessing,我遇到了这样一个问题:mp.Pool.join()在每次迭代中花费的时间越来越多。我无法在一个较小的测试用例上重新创建这个问题,但是我在这里给出了我的实现流程。如有任何见解,将不胜感激 while (ftime < etime): results = [] pool = mp.Pool(10) for tid in tracks: results.append(pool.apply_async(processTrack, args=(tid, df,

我遇到了这样一个问题:mp.Pool.join()在每次迭代中花费的时间越来越多。我无法在一个较小的测试用例上重新创建这个问题,但是我在这里给出了我的实现流程。如有任何见解,将不胜感激

while (ftime < etime):
    results = []
    pool = mp.Pool(10)
    for tid in tracks:
        results.append(pool.apply_async(processTrack, args=(tid, df, tracksH)))
    pool.close()
    pool.join()
    for i in range(0, len(tracks)):
        if (results[i].ready()):
            gotresults = results[i].get()
            insertrows = gotresults[0]
            updaterows = gotresults[1]
    ftime = ftime + oneminute

使用上下文管理器来处理池。更重要的是,为什么要在循环中创建池?!这可能是不必要的,而且,从计时中可以看出,这非常昂贵。这就是我在循环中创建池的原因:我必须使用.join()来确保所有任务都已结束。如果我在关闭前进行连接,我会得到一个错误:文件“match.py”,第1069行,在主pool.join()文件“/usr/lib/python3.6/multiprocessing/pool.py”,第545行,在连接断言self中。\u状态为(关闭,终止)。另一方面,如果我关闭池,我将无法在下一轮中访问它:apply_async raise ValueError(“pool not running”)ValueError:pool not running中的File“/usr/lib/python3.6/multiprocessing/pool.py”,第355行。我的意思是将mp.Pool()的
设置为:
之外的while
。在看不到更多程序的情况下,很难了解细节,但我相信您共享的大部分代码片段都可以大大简化。总之,你能分享更多你的代码吗(请看:)?我应该能够诊断出答案,重构整个过程,并在明天生成一个答案:)非常感谢您对尝试使用上下文管理器的提示。今天我将进一步调试processTrack的内部,如果仍然存在问题,我将创建一个示例。processTrack中确实存在一个瓶颈,导致某些特定线程完成速度较慢。下院议员,现在不再是问题了。不过,我将使用上下文管理器。多谢。
Iteration    Time (s)
    1         1.52
    2         7.58
    3        11.36
    4        19.23
    5        27.78
    6        34.32
    7        51.59