Я чувствую, что первое, что нужно отметить, это то, что каждый дочерний процесс будет импортировать основной скрипт и иметь собственную локальную копию. Невозможно использовать глобальные переменные так, как вы пытаетесь здесь, потому что дочерние процессы не используют одно и то же пространство имен. Если вы установите на использование мультипроцессирования для этого, вам нужно использовать коммуникационную трубу некоторого описания, как описано в следующей документации:
http://pymotw.com/2/multiprocessing/communication.html#multiprocessing-queues
Я немного любопытно, что ваша конечная цель здесь используя многопроцессорность. Тем не менее, если вы действительно хотите сделать это, возможно:
import multiprocessing
import tkinter
import time
def worker(q):
#q is a queue for communcation.
#Set up tkinter:
root = tkinter.Tk()
localvar = tkinter.StringVar()
wind = tkinter.Entry(root,textvariable=localvar)
wind.grid()
#This callback puts the contents of the entry into the queue
#when the entry widget is modified
def clbk(name,index,mode,q=q):
q.put(localvar.get())
localvar.trace_variable('w',clbk)
#Some window dressing that will signal to the main process that
#the window has been closed
def close(root=root,q=q):
q.put('EXIT')
root.destroy()
root.quit()
root.protocol("WM_DELETE_WINDOW",close)
root.mainloop()
def main():
#Make a queue to facilitate communication:
queue = multiprocessing.Queue()
p = multiprocessing.Process(target=worker,args=(queue,))
p.start()
#Wait for input...
while True:
ret = queue.get()
print(ret)
if ret=='EXIT':
break
time.sleep(0.1)
#Finally, join the process back in.
p.join()
if __name__ == '__main__':
main()
Игнорирование показуха, что теперь будет печатать текст, введенный в ваш вход Tkinter виджета, и выходит, когда окно закрыто.
Если это только для создания функциональных вещей, а не для ускорения работы, вы, вероятно, захотите использовать потоки, которые обмениваются памятью с исходной нитью. Процессы немного менее просты в обращении. –
Это имеет значение? –