Следующая функция предназначена для запуска цикла в течение 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))
что я делаю неправильно?
Является ли код, который вы включили, что вы используете? 'time.sleep()' не принимает параметр ключевого слова. –