2016-06-28 4 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関数は、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

私はあなたが持っているエラーメッセージは何もわかりませんが、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

関連する問題