如何在没有多线程的情况下在python中运行多进程?例如,考虑以下问题: -Python中的多进程tkinter
我们必须创建一个Gui,它有一个启动按钮来启动一个函数(比如打印所有整数),并且有一个停止按钮,以便点击它可以停止该功能。
如何在Tkinter中做到这一点?
如何在没有多线程的情况下在python中运行多进程?例如,考虑以下问题: -Python中的多进程tkinter
我们必须创建一个Gui,它有一个启动按钮来启动一个函数(比如打印所有整数),并且有一个停止按钮,以便点击它可以停止该功能。
如何在Tkinter中做到这一点?
然后,您需要将Button
小部件与启动工作线程的函数绑定。例如:
import time
import threading
import Tkinter as tk
class App():
def __init__(self, root):
self.button = tk.Button(root)
self.button.pack()
self._resetbutton()
def _resetbutton(self):
self.running = False
self.button.config(text="Start", command=self.startthread)
def startthread(self):
self.running = True
newthread = threading.Thread(target=self.printints)
newthread.start()
self.button.config(text="Stop", command=self._resetbutton)
def printints(self):
x = 0
while self.running:
print(x)
x += 1
time.sleep(1) # Simulate harder task
随着self.running
的方法,你只能通过改变其值正常结束线程。请注意,在执行printints
时,使用多个线程可避免阻塞GUI。
我已阅读this previous question,我想你为什么明确地问这里没有多线程的解决方案。在Tkinter中,该解决方案可用于其他线程必须与GUI部件通信的场景。例如:在渲染一些图像时填充进度条。
但是,正如评论中指出的那样,这种方法对于打印数字来说太复杂了。
Here你可以找到很多关于Tkinter的信息和更多的例子。
编辑:
由于您的新问题已经关闭,我会在这里更改代码澄清最后一点。
线程是对这个问题过于复杂的解决方案。 – 2013-02-25 11:39:27
@BryanOakley我完全同意,但我认为使用工作者线程是为了比打印整数更有意义 - 即处理大量数据,这可能会阻止GUI直到完成。 – 2013-02-25 12:56:53
这个问题具体问到如何做这个_without_多线程。 – 2013-02-25 13:51:00
您是否尝试过使用多处理模块?似乎是你正在寻找的人。
当你说“另一个进程”时,你是否意指另一个进程 - 生成一个.exe或相当于?或者,当你说“过程”时,你真的是指“其他功能”吗?我很难相信你会有一个完整的单独的过程来打印整数。 – 2013-02-25 11:40:28
我的意思是其他一些功能。 – Chandan 2013-02-25 18:14:06
@Chandan:在提出技术问题时,术语至关重要。在这种情况下,进程和函数之间存在着巨大的差异。你应该编辑你的问题,以反映你不打算产卵其他进程。 – 2013-02-25 23:55:33