如何在给定时间后结束 for 循环
How to end a for loop after a given amount of time
我为许多对象循环执行我的代码,似乎处理的时间太多。
我想添加一个条件,例如在 30 分钟后停止执行。应该怎么做?我是否需要另一个 for 循环和 timeit
模块,或者它可以更容易地完成?
您可以实施开始时间并在开始时间过去 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
你可以这样做:
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
语句就会退出循环。
所以这是我的变体如何做到这一点(假设我们通过 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
我为许多对象循环执行我的代码,似乎处理的时间太多。
我想添加一个条件,例如在 30 分钟后停止执行。应该怎么做?我是否需要另一个 for 循环和 timeit
模块,或者它可以更容易地完成?
您可以实施开始时间并在开始时间过去 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
你可以这样做:
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
语句就会退出循环。
所以这是我的变体如何做到这一点(假设我们通过 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