2017-08-14 21 views
0

スレッドからのTimer機能では苦労します。Threading.Timer(5、function)は5秒ごとに起動します

私のプログラムが始まると、x秒ごとに統計情報を記録したいと思う。

私はTimer機能(5秒ごとの起動機能)でこれを実行できると思いました。

from threading import Timer 
def startLogger(): 
    while True: 
     t = Timer(5, function) 
     t.start() 


def function(): 
    print("hey") 

をしかし、それはエラーを起動するので、私はそれはそれを行うには良い方法ではないと思う。今のところ

、私でした。

RuntimeError: can't start new thread

誰かが私に手掛かりを与えることができれば、それをいただければ幸いです!

答えて

1

以下を試すことができます。この関数の本体の最後で次の関数呼び出しをスケジューリングするという考えは、

import threading 

def mylog(): 
    print "hey" 
` threading.Timer(5.0, mylog)`.start() 

mylog() 
2

5秒ごとに新しいスレッドを開始する代わりに、スレッドを1つだけ作成してそこからすべてのコードを実行できます。

from time import sleep 
from threading import Thread 

def startLogger(): 
    while True: 
     function() 
     sleep(5) 

def function(): 
    print("hey") 

Thread(target=startLogger).start() 

startLoggerが継続的に実行されます。 functionに電話をかけ、5秒間ポーズしてから、もう一度やり直してfunctionなどと電話をかけます。

sleep(5)は、5秒間メインスレッドを停止しないように、独自のスレッドになります。

関連する問題