Tôi đã tìm kiếm một vòng thời gian dễ đọc hơn khi gặp câu hỏi này ở đây. Cái gì đó như:
for sec in max_seconds[10]:
do_something[]
Vì vậy, tôi đã tạo ra người trợ giúp này:
# allow easy time-boxing: 'for sec in max_seconds[42]: do_something[]'
def max_seconds[max_seconds, *, interval=1]:
interval = int[interval]
start_time = time.time[]
end_time = start_time + max_seconds
yield 0
while time.time[] < end_time:
if interval > 0:
next_time = start_time
while next_time < time.time[]:
next_time += interval
time.sleep[int[round[next_time - time.time[]]]]
yield int[round[time.time[] - start_time]]
if int[round[time.time[] + interval]] > int[round[end_time]]:
return
Nó chỉ hoạt động với đầy đủ vài giây là ok cho trường hợp sử dụng của tôi.
Examples:
for sec in max_seconds[10] # -> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
for sec in max_seconds[10, interval=3] # -> 0, 3, 6, 9
for sec in max_seconds[7]: sleep[1.5] # -> 0, 2, 4, 6
for sec in max_seconds[8]: sleep[1.5] # -> 0, 2, 4, 6, 8
Xin lưu ý rằng khoảng thời gian đó không chính xác, vì tôi chỉ chờ đợi đầy đủ [giấc ngủ không bao giờ tốt cho tôi với thời gian