如何让这个计时器永远运行?

时间:2010-04-24 01:54:03

标签: python multithreading timer

from threading import Timer

def hello():
    print "hello, world"

t = Timer(30.0, hello)
t.start()

此代码仅触发计时器一次。

如何让计时器永远运行?

谢谢,

更新

这是对的:

import time,sys

def hello():
    while True:
        print "Hello, Word!"
        sys.stdout.flush()
        time.sleep(2.0)
hello()

和此:

from threading import Timer

def hello():
    print "hello, world"
    sys.stdout.flush()
    t = Timer(2.0, hello)
    t.start()

t = Timer(2.0, hello)
t.start()

4 个答案:

答案 0 :(得分:9)

threading.Timer执行一次函数。如果您愿意,该功能可以“永远运行”,例如:

import time

def hello():
    while True:
        print "Hello, Word!"
        time.sleep(30.0)

使用多个Timer实例会消耗大量资源而没有真正的附加值。如果您希望对每30秒重复一次的功能不具有侵略性,那么一个简单的方法就是:

import time

def makerepeater(delay, fun, *a, **k):
    def wrapper(*a, **k):
        while True:
            fun(*a, **k)
            time.sleep(delay)
    return wrapper

然后安排makerepeater(30, hello)而不是hello

对于更复杂的操作,我建议使用标准库模块sched

答案 1 :(得分:9)

只需在函数中重启(或重新创建)计时器:

#!/usr/bin/python
from threading import Timer

def hello():
    print "hello, world"
    t = Timer(2.0, hello)
    t.start()

t = Timer(2.0, hello)
t.start()

答案 2 :(得分:1)

来自线程导入计时器  它取决于你想要永远运行的部分,如果它正在创建一个新的线程让我们说每10秒就可以执行以下操作 来自线程导入计时器

import time
def hello():
    print "hello, world"

while True: #Runs the code forever over and over again, called a loop
    time.sleep(10)#Make it sleep 10 seconds, as to not create too many threads
    t = Timer(30.0, hello)
    t.start()

如果你想永远运行你好的世界,你可以做到以下几点:

from threading import Timer

def hello():
    while True: # Runs this part forever
        print "hello, world"

t = Timer(30.0, hello)
t.start()

在python中搜索循环以获取有关此

的更多信息

答案 3 :(得分:0)

这是我针对此问题的代码:

import time
from  threading import Timer

class pTimer():
    def __init__(self,interval,handlerFunction,*arguments):
        self.interval=interval
        self.handlerFunction=handlerFunction
        self.arguments=arguments
        self.running=False
        self.timer=Timer(self.interval,self.run,arguments)

    def start(self):
        self.running=True
        self.timer.start()
        pass

    def stop(self):
        self.running=False
        pass

    def run(self,*arguments):
        while self.running:
           self.handlerFunction(arguments)
           time.sleep(self.interval)

另一个脚本页面:

def doIt(arguments):
    #what do you do
    for argument in arguments:
        print(argument)

mypTimer=pTimer(2,doIt,"argu 1","argu 2",5)

mypTimer.start()