2015-04-18 1 views
1

Я работаю с python. Мне нужно выполнить действие через n секунд, в то время как другое условие истинно. Я не знаю, если я должен использовать нить или только таймер:сделать действие после n секунд python

start_time = time.time() 
while shape == 4: 
    waited = time.time() - start_time 
    print start_time 
    if waited >= 2: 
     print "hello word" 
     break 

формы всегда изменять (номер моего пальца в Франце камеры) в то время как это 4 и через 2 секунды (как shape==4 и shape==4 и shape==4 много раз) Мне нужно сделать действие (здесь я использую только печать). Как я могу это сделать?

+0

Что это имеет отношение к OpenCV? – KSFT

+0

Вы хотите, чтобы другой код продолжался? –

ответ

0

Если я правильно истолковал ваш вопрос, вы хотите, чтобы что-то произошло каждые 2 секунды, пока ваше условие истинно, но могут быть и другие вещи, которые вам могут понадобиться, поэтому что-то, что блокирует идеально. В этом случае вы можете проверить, является ли значение секунд текущего времени кратным 2. В зависимости от других действий, происходящих в цикле, интервал не будет точно 2 секунды, но довольно близко.

from datetime import datetime 

while shape == 4: 
    if datetime.now().second % 2 == 0: 
     print "2 second action" 
    # do something else here, like checking the value of shape 
0

Как предположил Mu, вы можете спать текущий процесс с time.sleep, но вы хотите создать новую тему, как так, что вызывает переданную функцию каждые пять секунд, не блокируя основной поток.

from threading import * 
import time 

def my_function(): 
    print 'Running ...' # replace 

class EventSchedule(Thread): 
    def __init__(self, function): 
     self.running = False 
     self.function = function 
     super(EventSchedule, self).__init__() 

    def start(self): 
     self.running = True 
     super(EventSchedule, self).start() 

    def run(self): 
     while self.running: 
      self.function() # call function 
      time.sleep(5) # wait 5 secs 

    def stop(self): 
     self.running = False 

thread = EventSchedule(my_function) # pass function 
thread.start() # start thread 

# you can keep doing stuff here in the main 
# program thread and the scheduled thread 
# will continue simultaneously