2013-02-24 7 views
3

다중 스레드를 사용하지 않고 Python으로 여러 프로세스를 실행하는 방법은 무엇입니까? 예를 들어, 다음과 같은 문제를 고려하십시오 : -Python tkinter의 다중 처리

우리는 기능을 시작하는 시작 버튼이있는 (예 : 모든 정수를 인쇄합니다) 정지 버튼을 클릭하여 기능을 중지하도록하는 Gui를 만들어야합니다.

Tkinter에서이 작업을 수행하는 방법은 무엇입니까?

+1

"다른 프로세스"라고 말하면 문자 그대로 다른 프로세스를 의미합니까 - .exe 또는 이와 동등한 항목을 생성합니까? 또는 "프로세스"라고 말하면 실제로 "다른 기능"을 의미합니까? 저는 정수를 출력하는 것과는 별개의 과정을 거쳐야한다고 생각합니다. –

+0

나는 다른 기능을 의미했습니다. – Chandan

+1

@Chandan : 기술적 인 질문을 할 때 용어가 매우 중요합니다. 이 컨텍스트에서 프로세스와 함수 사이에는 _ 큰 차이가 있습니다. 다른 프로세스를 생성 할 의사가 없으므로 질문을 편집해야합니다. –

답변

5

그러면 작업 스레드를 시작하는 함수로 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에 대한 많은 정보와 예제를 찾을 수 있습니다.


편집 :

새로운 질문이 폐쇄 되었기 때문에, 나는 마지막 점을 명확히하기 위해 여기에 코드를 변경할 수 있습니다.

+0

스레딩은이 문제에 대한 지나치게 복잡한 해결책입니다. –

+0

@BryanOakley 전적으로 동의합니다.하지만 작업자 스레드를 사용하면 정수 인쇄보다 관련성이 높습니다. 즉, 대량의 데이터를 처리하면 GUI가 완료 될 때까지 GUI가 차단 될 수 있습니다. –

+0

이 질문은 특히 다중 스레딩을 사용하지 않고이 작업을 수행하는 방법을 묻습니다. –

0

다중 처리 모듈을 사용하려고 했습니까? 너가 찾고있는 것 같아.

관련 문제