Il seguente codice si blocca senza fare nulla in Python 3.2.2 in Linux:Perché il tkinter non funziona bene con il multiprocessing?
import tkinter
from multiprocessing import Process
def f():
root = tkinter.Tk()
label = tkinter.Label(root)
label.pack()
root.mainloop()
p = Process(target=f)
p.start()
L'unica informazione che ho trovato su questo problema è issue 5527, in cui si nota che il problema è con tkinter
importati prima il processo è biforcato, che può essere risolto importando tkinter
all'interno della funzione f
e che il problema si verifica in Linux ma non in Solaris.
Qualcuno sa che cosa causa esattamente questo problema e se è intenzionale o verrà risolto? C'è qualche soluzione alternativa oltre all'importazione di tkinter
localmente ovunque ne abbia bisogno (che sembra uno stile brutto)? Qualche altro modulo ha problemi simili con il multiprocessing?
-0. Conosci il problema. Sai che è stata presentata una segnalazione di bug. Conosci la soluzione alternativa. L'unica altra importante domanda è "Qualcun altro modulo ha problemi simili con il multiprocessing?", Che sembra un po 'aperto. –
@StevenRumbalski: Non conosco il problema: non ho idea di cosa stia facendo tkinter che non funziona qui o perché dipende dalla piattaforma. Il bug report è stato archiviato oltre 3 anni fa, e non vi è alcun segno che qualcuno sappia perché (o esattamente in quali condizioni) questo accada o come risolverlo. Forse la mia ultima domanda dovrebbe aver letto "ci sono altri moduli di libreria standard che non possono essere importati prima di forking un processo", che è un po 'più specifico. – James