2015-03-31 153 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()'不带关键字参数。 – 2015-03-31 21:46:01

回答

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 2015-03-31 21:50:21

+0

@AlexC听起来好像你以某种方式隐藏你的错误,无论是通过在Python代码中吞下它们,还是发送错误文本输出到某处它都不会被看到。 – 2015-03-31 22:00:11

+0

@DanGetz是的,确切的! – AlexC 2015-04-01 12:33:17

相关问题