Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用tkinter按钮终止两个进程_Python_Python 3.x_Tkinter_Multiprocessing - Fatal编程技术网

如何在Python中使用tkinter按钮终止两个进程

如何在Python中使用tkinter按钮终止两个进程,python,python-3.x,tkinter,multiprocessing,Python,Python 3.x,Tkinter,Multiprocessing,我想用python脚本创建两个进程。需要通过tkinter按钮启动和停止这些过程。进程可以正确启动,但不能终止。使用tkinter按钮正确终止进程的最简单方法是什么? 哪种最佳实践方式 从tkinter导入* 导入多处理 def print1(): 全球a 当a==True时: 打印('im进程1') def print2(): 全球a 当a==True时: 打印('im进程2') def start(): process1.start() process2.start() def stop()

我想用python脚本创建两个进程。需要通过tkinter按钮启动和停止这些过程。进程可以正确启动,但不能终止。使用tkinter按钮正确终止进程的最简单方法是什么? 哪种最佳实践方式

从tkinter导入*
导入多处理
def print1():
全球a
当a==True时:
打印('im进程1')
def print2():
全球a
当a==True时:
打印('im进程2')
def start():
process1.start()
process2.start()
def stop():
全球a
a=错误
a=正确
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
process1=多处理。进程(目标=打印1)
process2=多处理。进程(目标=打印2)
root=Tk()
根标题(“标题”)
根几何(“200x200”)
app=帧(根)
app.grid()
开始=按钮(应用程序,text=“开始”,命令=开始)
停止=按钮(应用程序,text=“停止”,命令=停止)
start.grid()
stop.grid()
root.mainloop()
process1.join()
process2.join()

问题似乎出在停止方法中

我想我可能知道问题是什么,但我不是100%确定。python文档中似乎给出了原因的答案。这里的代码运行良好(我编辑了语法,并对按钮使用了
tkk
,看起来更好):

希望这有帮助

普通变量不在
多处理.Process的实例之间共享

这意味着您的:

global a
是每个进程中的一个不同的全局变量,与主Python程序中的第三个
global a
分开。因此,当您使用tk按钮将最后一个
a
设置为
False
时,通过
process1
记住的过程中的
a
仍然是
True
,通过
process2
记住的过程中的
a

您可以跨流程共享变量。有两种方法可以做到这一点:通过,或通过共享内存。共享内存更高效,但更难以使用,有时也有OS依赖性,因此如果不需要特别高性能,请考虑使用Manager。
global a