Как я могу заставить этот таймер работать вечно? - PullRequest
4 голосов
/ 24 апреля 2010
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 ]

9 голосов
/ 24 апреля 2010

Просто перезапустите (или заново) таймер в функции:

#!/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()
9 голосов
/ 24 апреля 2010

A 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 голос
/ 24 апреля 2010

от таймера импорта потоков это зависит от того, какую часть вы хотите запустить навсегда, если она создает новый поток, скажем, каждые 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, чтобы получить больше информации об этом

0 голосов
/ 27 февраля 2019

Это мой код для этой проблемы:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...