Как завершить цикл for через заданный промежуток времени - PullRequest
0 голосов
/ 08 октября 2019

Я выполняю свой код в цикле для многих объектов, и кажется, что процесс занимает слишком много времени.

Я хотел бы добавить условие, которое останавливает выполнение, например, через 30 минут. Как это должно быть сделано? Нужен ли мне другой цикл for и модуль timeit для этого или это можно сделать проще?

Ответы [ 3 ]

2 голосов
/ 08 октября 2019

Вы можете сделать это примерно так:

import time

time_limit = 60 * 30 # Number of seconds in one minute
t0 = time.time()
for obj in list_of_objects_to_iterate_over:
    do_some_stuff(obj)   
    if time.time() - t0 > time_limit:
        break  

Оператор break будет выходить из цикла всякий раз, когда будет достигнут конец вашей итерации после установленного вами временного ограничения.

1 голос
/ 08 октября 2019

Вы можете реализовать время запуска и прекратить выполнение через 30 минут после начала

from datetime import datetime, timedelta
starting_time = datetime.now()
for item in something:
    #do something
    if (datetime.now()- starting_time) //timedelta(minutes=1) >= 30:
        break

0 голосов
/ 09 октября 2019

Итак, вот мой вариант, как это можно сделать (при условии, что мы собираем данные с помощью ответа sql):

  for i in items:
    if total_records % 100 == 0:
        logger.warning(
            "Processed {} items in {} ms".format(total_records, int(time.time() * 1000) - start_time_ms))
    if int(time.time() * 1000) - start_time_ms > 3600000:
        cur.close()
        conn.close()
        return total_records
...