나는 간단한 PyGTK 응용 프로그램을 가지고 있습니다. 나는 일부 데이터를 가져오고 GUI를 새로 여러주기 작업을 실행해야하기 때문에,이 같은 스레드를 확장 :주문형 트리거가있는 정기 파이썬 스레드
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.setDaemon(True)
self.event = threading.Event()
self.event.set()
def run(self):
while self.event.is_set():
timer = threading.Timer(60, self._run)
timer.start()
timer.join()
def cancel(self):
self.event.clear()
def _run(self):
gtk.threads_enter()
# do what need to be done, fetch data, update GUI
gtk.threads_leave()
내가, 응용 프로그램 부트 스트랩에 스레드를 시작 일부 목록에 저장하고 종료하기 전에이를 취소 할 수 있습니다. 이것은 완벽하게 작동합니다.
지금은 새로 실행 버튼을 추가하여 스레드 중 하나가 즉시 실행되도록하고 현재 실행 중이 아닌 경우 실행 대기 시간을 기다리지 않습니다.
bool var를 MyThread에 추가하여 스레드가 실행 중인지 여부를 표시하고 (실행 전 _run 설정, 완료시 재설정), 실행 중이 아닌 경우 MyThread._run() 내 응용 프로그램이 응답을 종료하고 실행을 완료하지 못하게하는 _run 작업이되었습니다.
왜 이러한 일이 발생하는지 잘 모르겠습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 백그라운드에서 새로 고침을 실행하여 GUI를 차단하지 않아도 괜찮습니다.
실행을 호출하고 초 단위로 1을 전달하면 타이머가 더 빨리 트리거 할 수 있습니까?
고마워요! 그게 바로 제가 찾던 것입니다. – umpirsky