Multiprocessing mit Tkinter-Fortschrittsbalken, minimales BeispielPython

Python-Programme
Guest
 Multiprocessing mit Tkinter-Fortschrittsbalken, minimales Beispiel

Post by Guest »

Ich suche nach einer Möglichkeit, eine Multiprocessing-Aufgabe mit dem Tkinter-Fortschrittsbalken zu verfolgen. Das geht ganz einfach mit tqdm zur Anzeige im Terminal.
Anstelle von tqdm würde ich gerne ttk.Progressbar< verwenden /code>, aber bei allen Versuchen, die ich diesbezüglich unternommen habe, blockieren die Aufgaben den Versuch, den Fortschrittsbalken zu aktualisieren (z. B. mithilfe von update_idletasks und ähnlichem). Unten finden Sie eine Vorlage für die Art von Lösung, nach der ich suche:

Code: Select all

import time
from multiprocessing import Pool
from tqdm import tqdm
import tkinter as tk
import tkinter.ttk as ttk

def task(x):
time.sleep(0.1)
return x * x

def start_task():
num_processes = 12
num_tasks = 100

with Pool(processes=num_processes) as pool:
with tqdm(total=num_tasks, desc="Processing") as pbar:
def update_progress(_):
# 
pbar.update(1)

for i in range(num_tasks):
pool.apply_async(task, args=(i,), callback=update_progress)
pool.close()
pool.join()

if __name__ == "__main__":
root = tk.Tk()
root.title("Task Progress")
progress_bar = ttk.Progressbar(root, maximum=100, length=300)
progress_bar.pack(pady=20)
button = tk.Button(text="Start", command=start_task)
button.pack(fill="x", padx=10, pady=10)
root.mainloop()
In der Lösung möchte ich auch die Ausgabe der Aufgabe erhalten (in diesem Fall eine Liste von x*x).
If Eine andere Multiprocessing-Struktur würde besser funktionieren. Sie können sie gerne anpassen (Pool schien für die Demonstration einfach die einfachste zu sein).
Dies ist eine Frage, die schon einmal bei Stack Overflow gestellt wurde, aber alle vorherigen Antworten Ich habe festgestellt, dass es sich nicht um Minimalbeispiele handelte, und ich fand sie nicht sehr hilfreich.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post