Created
December 24, 2017 20:11
-
-
Save t00n/c164f4a2bbaf2b497e039d04fa773a6d to your computer and use it in GitHub Desktop.
Small function to iterative over a time range
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import datetime | |
from time import sleep | |
def trange(start=None, end=None, interval=1): | |
now = datetime.now().timestamp() | |
if start is None: | |
start = now | |
else: | |
start = start.timestamp() | |
if end is not None: | |
end = end.timestamp() | |
if start > now: | |
sleep(start - now) | |
now = start | |
i = 1 | |
while end is None or now < end: | |
yield datetime.now() | |
now = datetime.now().timestamp() | |
target = start + i * interval | |
if target > now: | |
sleep(target - now) | |
now = target | |
i += 1 | |
if __name__ == '__main__': | |
from datetime import timedelta | |
print(datetime.now(), "Starts now, end in 5 seconds, interval 1") | |
for t in trange(end=datetime.now() + timedelta(seconds=5)): | |
print(t) | |
print(datetime.now(), "Starts in 5 seconds, ends in 10 seconds, interval 1") | |
for t in trange(start=datetime.now() + timedelta(seconds=5), end=datetime.now() + timedelta(seconds=10)): | |
print(t) | |
print(datetime.now(), "Starts now, never ends, interval 5") | |
for t in trange(interval=5): | |
print(t) | |
sleep(2) # as long as it's less than the interval it will work |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment