线程计时器问题 python
Thread timer issues python
我正在尝试使用 thread.Timer class,但我总是遇到崩溃。
这是我的想法:我有一个代码可以在 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)写的插件的一部分,但我不认为问题与软件有关,这可能是因为我没有使用线程class 适当地。任何帮助将不胜感激。
我不知道您收到的错误消息是什么,但可能是函数 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);
我正在尝试使用 thread.Timer class,但我总是遇到崩溃。 这是我的想法:我有一个代码可以在 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)写的插件的一部分,但我不认为问题与软件有关,这可能是因为我没有使用线程class 适当地。任何帮助将不胜感激。
我不知道您收到的错误消息是什么,但可能是函数 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);