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)
这个问题有更好的解决办法吗?任何帮助将不胜感激。
我会使用 ThreadPoolExecutor
和 with
子句以避免任何意外行为。
with concurrent.futures.ThreadPoolExecutor() as executor:
for i in range(0, pages):
executor.submit(part, i)
print("All tasks completed")
launch_main()
基本上,我需要处理(转换为 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)
这个问题有更好的解决办法吗?任何帮助将不胜感激。
我会使用 ThreadPoolExecutor
和 with
子句以避免任何意外行为。
with concurrent.futures.ThreadPoolExecutor() as executor:
for i in range(0, pages):
executor.submit(part, i)
print("All tasks completed")
launch_main()