Skip to content

Instantly share code, notes, and snippets.

@hackaugusto
Created January 17, 2020 11:53
Show Gist options
  • Save hackaugusto/5f67b0010b027d8951b4296d2b99ebbb to your computer and use it in GitHub Desktop.
Save hackaugusto/5f67b0010b027d8951b4296d2b99ebbb to your computer and use it in GitHub Desktop.
import time
from dataclasses import dataclass, field
from typing import List
import gevent
@dataclass
class Idle:
interval: float
before: float = field(default_factory=time.time)
start: float = field(init=False)
measurements: List[float] = field(init=False, default_factory=list)
def __post_init__(self) -> None:
self._reset(time.time())
def _reset(self, start: float) -> None:
self.start = start
self.measurements.clear() # pylint: disable=no-member
def before_poll(self) -> None:
self.before = time.time()
def after_poll(self) -> None:
curr_time = time.time()
self.measurements.append(curr_time - self.before) # pylint: disable=no-member
measurement_time = curr_time - self.start
if measurement_time >= self.interval:
idled = sum(self.measurements)
print(
{
"msg": "Idle",
"start": self.start,
"curr_time": curr_time,
"measurement_time": measurement_time,
"idled": idled,
"idle_pct": idled / measurement_time,
}
)
self._reset(curr_time)
idle = Idle(1)
loop = gevent.get_hub().loop
loop.prepare().start(idle.before_poll)
loop.check().start(idle.after_poll)
print(time.time())
def fib(n):
if n <= 0:
return 1
return fib(n - 1) + fib(n - 2)
for i in range(35):
print(".", end="", flush=True)
fib(i)
gevent.sleep(0.1)
print("")
print(time.time())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment