2016-06-28 60 views
0

我想使用thread.Timer类,但我不断收到崩溃。 这里有个想法:我有一个代码可以启动一个Web应用程序的优化。优化启动后,我想定期向Web应用服务器发送请求,以了解优化是完成还是仍在执行。线程计时器问题python

def checkPeriodically(self): 
    print "Sending a request" 
    finished = self.checkOptim() 
    if finished : 
     return 
    t = threading.Timer(60,self.checkPeriodically) 
    t.start() 

我的checkOptim函数使用机械化来连接到应用程序并阅读结果页面;那么它使用HTMLParser来检查优化是否完成。

def checkOptim(self): 
    browser = mechanize.Browser() 
    browser.set_handle_refresh(True, honor_time=True, max_time=10) 
    browser.open('resultPageURL') 
    response = browser.response().read() 
    parser = MyHTMLParser(self.optimName) 
    parser.feed(response) 
    return parser.optimFinished 

所有这一切是一个插件我写QGIS(地理信息系统)的一部分,但我不认为这个问题是关系到软件,这可能是因为我没有正确使用线程类。任何帮助将深表感谢。

回答

1

我不知道你有什么错误信息,但它可能是函数checkPeriodically是其一部分的对象不再存在。工作代码

这里例如:(I“M保持参照对象,直到所有作业都完成)

import threading 
import time 

class cls: 
    def __init__(self): 
     pass 
     self.stop_if_zero = -10 

    def checkPeriodically(self): 
     print "Sending a request %s" % self.stop_if_zero 
     self.stop_if_zero +=1; 
     if 0 == self.stop_if_zero : 
      return 
     t = threading.Timer(2,self.checkPeriodically) 
     t.start()  

#create instance of the class 
st = cls() 
#start the thread with timer 
st.checkPeriodically(); 

while (0 > st.stop_if_zero): 
    # keep referance to ST untill it ends or else it might crashed. 
    time.sleep (0.1); 
+0

你是对的,问题来自于一个事实,即oject(类),从该当定时器发生时,我称之为“checkPeriodically”不再存在,导致软件崩溃。感谢您的帮助! – Ril8772