2015-11-25 2 views
-1

это мой исходный код, который выполняет функцию каждые 1 секунду(python) выполняет функцию каждые x секунд

Купить, он выполняется только один раз.

Короче говоря, я хочу, чтобы получить # линии от имени выхода трубы через каждые секунды

Есть ли какие-либо предложения по этой проблеме?

спасибо за помощь заранее

class Monitor: 
    def __init__(self, namedpipe, name): 
     self.namedpipe = namedpipe 
     self.name = name 
     self.count = 0 
    def run(self): 
     print self.name+" start run" 
     while True: 
      line = self.namedpipe.readline() 
      self.count = self.count+1 
    def getCost(self): 
     print "Hi" 


while True: 
    line = monitor.readline() 
    line = line.strip() 
    if not line: 
     ans =raw_input('stop?') 
     if ans=='y': break 
    monitorList = open(line, 'r') 
    m = Monitor(monitorList, line) 
    thread.start_new_thread(m.run,()) 
    time.sleep(1) 
    threading.Timer(0.1, m.getCost).start() 

ответ

1

С Threading.Timer, вы должны перезапустить таймер каждый раз, когда он истек - это во время выполнения функции, вызываемой при истечении таймера - м. getCost в вашем коде - таймер должен быть запущен снова. Возможно, вы захотите определить функцию обертки для выполнения этой работы, чтобы избежать загрязнения m.getCost() с помощью материалов таймера.

+0

Нет, это не задание этой функции. Должна быть функция-обертка, которая делает это. – glglgl

+0

Однако вы его кодируете, когда таймер истекает, он вызывает функцию - если вы хотите, чтобы таймер запускался снова, а затем где-то в выполнении этой функции вам нужно запустить таймер. – barny

Смежные вопросы