Python ThreadPoolExecutor 等待任务完成的时间不够长

Python ThreadPoolExecutor is not waiting long enough for task completion

基本上,我需要处理(转换为 PDF、调整大小和保存)多张图像,然后将它们加载到 tkinter。这是代码的相关部分。

def part(i):
    global prog
    zoom = 5    # zoom factor
    mat = fitz.Matrix(zoom, zoom)
    page = doc.loadPage(i) #number of page
    pix = page.getPixmap(matrix = mat)
    output = "Output_Images\Ques_"+str(i+1)+".png"
    pix.writePNG(output)
    prog += ((1/pages)*50)
    progress['value'] = prog
    load.update_idletasks()

executor = concurrent.futures.ThreadPoolExecutor(max_workers = 4)
for i in range(0, pages):
    executor.submit(part, i)

launch_main()

launch_main() 函数将所有图像和几个小部件放入循环中的 tk.Text 中。我面临的问题是,有时最后几张图片(每个 运行 中的变量)没有插入 tk.Text.

Output_Images 目录中有所有图片,这意味着 launch_main() 函数的调用早于预期,因此在保存所有图片之前循环结束。

但如果我这样做,即添加 time.sleep(),它似乎工作正常。

executor = concurrent.futures.ThreadPoolExecutor(max_workers = 4)
for i in range(0, pages):
    executor.submit(part, i)
    time.sleep(0.1)

这个问题有更好的解决办法吗?任何帮助将不胜感激。

我会使用 ThreadPoolExecutorwith 子句以避免任何意外行为。

with concurrent.futures.ThreadPoolExecutor() as executor:
    for i in range(0, pages):
        executor.submit(part, i)

print("All tasks completed")
launch_main()