2014-05-11 2 views
1

그래서 파이썬에서 여러 프로세스를 시작하는 데 문제가 있습니다. 하나의 프로세스를 사용하여 다운로드를 진행하고 다른 프로세스에서 진행률 표시 줄을 표시하려고합니다. 지금은 진행률 표시 줄 프로세스를 만드는 중입니다.하지만이 이상한 오류가 계속 발생합니다. 나는 그것이 내가 맥 OS X의 다음멀티 프로세싱 파이썬 코어 파운데이션 오류

을 사용하고 사실과 관련이있다 생각은 내 코드입니다 :

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가 실제로 복잡 할 수 있습니다. 파이썬은 동시에 여러 스레드를 실행할 수 없기 때문에 여러 프로세스를 사용해야합니다. 도와주세요.

답변

1

GUI를 이렇게 두 개의 프로세스로 분리 할 수 ​​없습니다. 마스터 프로세스에 모든 GUI 코드를 유지하고 다른 프로세스가 대기열을 통해 통신하도록해야합니다.

0

OS 10.8.5에서 코드에 동일한 문제가 있습니다. 여기에 나는 당신의 Tkinter로 "appStart"기능을 사용했습니다, 당신이 (갈래) 시작한 후 만 Tkinter를 가져와야합니다 것 같다 당신의 프로세스를 맥에서

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() 

및 Linux :

이 하나를 시도 프로세스를 작성하는 랩퍼.

일부 심판 : Python Tkinter application causes fork()/exec() error on Mac OS X
Why doesn't tkinter play nicely with multiprocessing?

관련 문제