Dlaczego tkinter nie gra dobrze z multiprocessingiem?
Następujący kod zawiesza się bez wykonywania jakichkolwiek czynności w python 3.2.2 w linux:
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()
Jedyne informacje, które znalazłem na temat tego problemu, toproblem 5527, w którym zauważono, że problem dotyczytkinter
importowany przed rozwidleniem procesu, można go naprawić importująctkinter
wewnątrz funkcjif
i że problem występuje w Linuksie, ale nie w Solarisie.
Czy ktoś wie, co dokładnie powoduje ten problem, a jeśli jest zamierzony lub zostanie ostatecznie naprawiony? Czy jest jakieś obejście inne niż importtkinter
lokalnie wszędzie, gdzie tego potrzebuję (co wygląda na kiepski styl)? Czy inne moduły mają podobne problemy z przetwarzaniem wieloprocesorowym?