Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/smartsleep.py
blob: 293c1d948b7f4ff7a1036f1bafcbbca366bc57f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""
A short module for implementing `Sleeper`. See its documentation.
"""

import time
import sys

#def log(text): print(text); sys.stdout.flush()

class Sleeper(object):
    """
    A smarter way to use `time.sleep()`, implemented as a context manager.
    Use it like this:

    with smartsleep.Sleeper(7):
        do_stuff()

    The Sleeper instance will ensure that at least 7 second have passed before
    control flows to the next lines of code.
    """
    def __init__(self,interval):
        self.interval=interval

    def __enter__(self,*args,**kwargs):
        self.starting_time=time.time()

    def __exit__(self,*args,**kwargs):
        #global log
        time_now=time.time()
        interval_gone=time_now-self.starting_time
        if interval_gone>=self.interval:
            #log("didn't sleep")
            return
        else:
            #log("slept")
            time.sleep(self.interval-interval_gone)