我想用python脚本创建两个进程。需要通过tkinter按钮启动和停止这些过程。进程正确启动,但不能终止。用tkinter按钮正确终止进程的最简单方法是什么? 哪种最佳做法?
from tkinter import *
import multiprocessing
def print1():
global a
while a == True:
print('im process 1')
def print2():
global a
while a == True:
print('im process 2')
def start():
process1.start()
process2.start()
def stop():
global a
a = False
a = True
if __name__ == '__main__':
process1 = multiprocessing.Process(target = print1)
process2 = multiprocessing.Process(target = print2)
root = Tk()
root.title("Title")
root.geometry("200x200")
app = Frame(root)
app.grid()
start = Button(app, text="Start", command=start)
stop = Button(app, text="Stop", command=stop)
start.grid()
stop.grid()
root.mainloop()
process1.join()
process2.join()
答案 0 :(得分:1)
在multiprocessing.Process
的实例之间不共享普通变量。
这意味着您:
global a
是每个进程中的不同全局变量,与主Python程序中的第三 global a
分开。因此,当您使用tk按钮将最后一个a
设置为False
时,通过a
记住的process1
仍然是True
, a
在通过process2
记住的过程中。
您可以在各个进程之间共享变量。有两种方法可以执行此操作:通过Manager
instances或通过共享内存。共享内存效率更高,但更难使用,并且有时具有操作系统依赖性,因此,如果您不需要特别高性能,请考虑使用Manager。
答案 1 :(得分:0)
问题似乎出在stop方法上。
我想我可能知道问题出在哪里,但我不确定100%。原因的答案似乎在python文档中。这段代码运行良好(我编辑了语法,并在按钮上使用了ResultSet
,看起来更好):
tkk
希望这会有所帮助!