2015-03-31 4 views
0

Следующая функция предназначена для запуска цикла в течение 20 минут, обработки SQL-заданий, если таковая имеется. Для того, чтобы избежать слишком много вызовов SQL, когда нет ничего, чтобы обработать, оно предназначено, чтобы спать в течение 5 секунд, прежде чем пытаться обработать задачу снова:Почему time.sleep останавливает выполнение вообще?

def main(): 
    sql = 'some sql task here;' 
    stop_time = datetime.today() + timedelta(minutes = 20) 
    print('Started at ', datetime.now()) 
    print('Should stop at', stop_time) 
    load_more_rows = True 
    with ConnectionParameters.get_conn() as conn: 
     while load_more_rows or (datetime.now() < stop_time): 
      try: 
       res = get_num_processed_batches(conn, sql) 
       processed_batch = res > 0 
      except Exception as ex: 
       log_error(repr(ex)) 
       processed_batch = False 
      if not processed_batch: 
       print('Sleeping at ', datetime.now()) 
       time.sleep(seconds=5) 
      load_more_rows = processed_batch 
      print('Finished iteration at ', datetime.now()) 
    print('Stopped at ', datetime.now()) 

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

('Started at ', datetime.datetime(2015, 3, 31, 17, 31, 6, 206652)) 
('Should stop at', datetime.datetime(2015, 3, 31, 17, 51, 6, 206630)) 
('Finished iteration at ', datetime.datetime(2015, 3, 31, 17, 31, 6, 356698)) 
('Finished iteration at ', datetime.datetime(2015, 3, 31, 17, 31, 6, 614349)) 
('Finished iteration at ', datetime.datetime(2015, 3, 31, 17, 31, 6, 638210)) 
('Finished iteration at ', datetime.datetime(2015, 3, 31, 17, 31, 6, 765645)) 
('Finished iteration at ', datetime.datetime(2015, 3, 31, 17, 31, 6, 885282)) 
('Finished iteration at ', datetime.datetime(2015, 3, 31, 17, 31, 7, 12109)) 
('Sleeping at ', datetime.datetime(2015, 3, 31, 17, 31, 7, 13803)) 

что я делаю неправильно?

+0

Является ли код, который вы включили, что вы используете? 'time.sleep()' не принимает параметр ключевого слова. –

ответ

4

time.sleep не принимает аргумент ключевого слова seconds:

time.sleep(5) 

Я не знаю, почему он не вызывает ошибку о отсутствует обязательный аргумент.

https://docs.python.org/2/library/time.html#time.sleep

>>> time.sleep(seconds=1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: sleep() takes no keyword arguments 
>>> time.sleep(1) 
>>> "everything is fine" 
+0

Это было - удаление «секунд =» устраняло проблему. Благодаря! – AlexC

+0

@AlexC Похоже, вы как-то скрываете свои ошибки, либо проглатывая их в коде Python, либо отправляя выводимый текст ошибки, где-то он не будет виден. –

+0

@DanGetz да, точно! – AlexC

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