考虑一个跨越多个进程或线程的Python脚本(我还没有决定哪个,我还在试验)。我想加入所有生成的进程/线程,这些进程/线程的创建时间晚于它们创建时。为此,我使用列表作为线程池:
pool = []
for job in jobs:
j = Process(target=some_Function, args=(some_Arg, ))
j.start()
pool.append(j)
# Lots of code
for p in pool:
p.join()
do_Right_Before_Exiting()
sys.exit()
这种方法的问题在于有很多很多进程,池就像内存泄漏一样。消除池可以节省大量内存,但我无法确保流程完成。我可以“破解”一个sleep(30)
给他们时间来完成,但我发现这个丑陋且不可靠。
我如何将进程/线程加入到运行代码之外的其他位置(可能加入C#标签或加入其他事件)?或者,我怎么可能检查所有进程/线程是否已完成,然后才进行?
答案 0 :(得分:0)
如果你的线程数组占用太多内存,我认为你有太多的线程。尝试将作业分成8个线程,看看是否能改善这些。
大多数人的核心数不超过8个。