Last active
November 4, 2024 15:24
-
-
Save tlrmchlsmth/4e366ada4290a1649cef40965115a81f to your computer and use it in GitHub Desktop.
This file contains hidden or 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
import os | |
import time | |
import asyncio | |
import argparse | |
import statistics | |
from typing import List | |
def benchmark_time_sleep(sleep_duration: float, iterations: int) -> List[float]: | |
durations = [] | |
for _ in range(iterations): | |
start = time.perf_counter() | |
time.sleep(sleep_duration) | |
duration = time.perf_counter() - start | |
durations.append(duration) | |
return durations | |
def benchmark_yield(iterations: int) -> List[float]: | |
durations = [] | |
for _ in range(iterations): | |
start = time.perf_counter() | |
os.sched_yield() | |
duration = time.perf_counter() - start | |
durations.append(duration) | |
return durations | |
def main(): | |
parser = argparse.ArgumentParser(description='Benchmark time.sleep() accuracy') | |
parser.add_argument('sleep_duration', type=float, help='Sleep duration in seconds') | |
parser.add_argument('iterations', type=int, help='Number of iterations to run') | |
parser.add_argument('--use_yield', action='store_true') | |
args = parser.parse_args() | |
if args.use_yield: | |
print(f"Benchmarking os.sched_yield() for {args.iterations} iterations...") | |
durations = benchmark_yield(args.iterations) | |
else: | |
print(f"Benchmarking sleep({args.sleep_duration:e}) for {args.iterations} iterations...") | |
durations = benchmark_time_sleep(args.sleep_duration, args.iterations) | |
print(f"\nResults:") | |
print(f"Requested sleep duration: {args.sleep_duration:e}s") | |
print(f"Mean actual duration: {statistics.mean(durations):e}s") | |
print(f"Std dev: {statistics.stdev(durations):e}s") | |
print(f"Min duration: {min(durations):e}s") | |
print(f"Max duration: {max(durations):e}s") | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment