多处理Python核心基础误差
因此,我在Python中启动多个进程时遇到了问题。我将使用一个进程运行下载,另一个进程显示进度条。现在,我正在制作进度条流程,但我一直遇到这个奇怪的错误。我认为这与我使用MacOSX有关 这是我的密码:多处理Python核心基础误差,python,concurrency,tkinter,multiprocessing,Python,Concurrency,Tkinter,Multiprocessing,因此,我在Python中启动多个进程时遇到了问题。我将使用一个进程运行下载,另一个进程显示进度条。现在,我正在制作进度条流程,但我一直遇到这个奇怪的错误。我认为这与我使用MacOSX有关 这是我的密码: import Tkinter as tk from multiprocessing import Process class Application(tk.Frame): def __init__(self, master = None): tk.Frame.__
import Tkinter as tk
from multiprocessing import Process
class Application(tk.Frame):
def __init__(self, master = None):
tk.Frame.__init__(self,master)
self.grid()
self.setup()
def setup(self):
self.label = tk.Label(self, text = "Progress Bar")
self.label.grid()
self.canvas = tk.Canvas(self, cursor = 'arrow', height = 400, width = 400)
self.canvas.grid()
self.rectangle = self.canvas.create_rectangle(0,0,399,20,fill = 'white')
self.canvas.grid()
def appStart():
app = Application()
app.master.title("Progress Bar")
app.mainloop()
p = Process(target = appStart)
p.start()
下面是错误:
The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
那么,我该如何解决这个问题呢。我非常想使用多处理库,因为它非常容易使用。对于并发性,我也是一个初学者,所以较低级别的API对我来说会非常复杂。我需要使用多个进程,因为Python不能同时运行多个线程。请帮助。您不能像这样将GUI分成两个进程。您需要将所有GUI代码保留在主进程中,并让其他进程通过队列与其通信 在OS 10.8.5中,我对您的代码也有同样的问题 试试这个:
from multiprocessing import Process
def appStart():
import Tkinter as tk
class Application(tk.Frame):
def __init__(self, master = None):
tk.Frame.__init__(self,master)
self.grid()
self.setup()
def setup(self):
self.label = tk.Label(self, text = "Progress Bar")
self.label.grid()
self.canvas = tk.Canvas(self, cursor = 'arrow', height = 400, width = 400)
self.canvas.grid()
self.rectangle = self.canvas.create_rectangle(0,0,399,20,fill = 'white')
self.canvas.grid()
app = Application()
app.master.title("Progress Bar")
app.mainloop()
if __name__ == '__main__':
p = Process(target = appStart)
p.start()
在Mac和linux中,似乎只有在启动(分叉)进程后才能导入Tkinter,这里我使用了“appStart”函数作为Tkinter包装来创建进程
参考文献: