线程计时器问题python

时间:2016-06-28 07:08:08

标签: python html python-multithreading mechanize-python

我正在尝试使用thread.Timer类,但我一直在崩溃。 这是一个想法:我有一个代码,可以在Web应用程序上启动优化。启动优化后,我想向Web应用服务器发送定期请求,以了解优化是否已完成或仍在执行。

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

我的checkOptim函数使用mechanize连接到应用程序并读取结果页面;然后它使用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(GIS)编写的插件的一部分,但我不认为问题与软件有关,可能是因为我没有正确使用线程类。任何帮助都将深表感谢。

1 个答案:

答案 0 :(得分:1)

我不知道你得到的错误信息是什么,但可能是checkPeriodically作为其一部分的对象不再存在。

这里是工作代码的例子:(我“在完成所有工作之前保持对对象的引用)。

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