54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Memoized config validator - uses @lru_cache.
|
|
Profile this to see the lru_cache wrapper overhead.
|
|
|
|
Usage:
|
|
python3 config_validator_memoized.py
|
|
python3 -m cProfile -s tottime config_validator_memoized.py
|
|
"""
|
|
|
|
import time
|
|
from functools import lru_cache
|
|
|
|
from common import validate_rule_slow, load_events
|
|
|
|
|
|
@lru_cache(maxsize=None)
|
|
def validate_rule_cached(rule_id, event_type):
|
|
"""Same validation but with caching."""
|
|
return validate_rule_slow(rule_id, event_type)
|
|
|
|
|
|
def process_events(events):
|
|
"""Process events using memoized validation."""
|
|
valid_count = 0
|
|
for rule_id, event_type, data in events:
|
|
if validate_rule_cached(rule_id, event_type):
|
|
valid_count += 1
|
|
return valid_count
|
|
|
|
|
|
ITERATIONS = 5
|
|
|
|
|
|
def main():
|
|
events = load_events()
|
|
print(f"Processing {len(events)} events (memoized), {ITERATIONS} iterations...")
|
|
|
|
times = []
|
|
for i in range(ITERATIONS):
|
|
if i == 0:
|
|
validate_rule_cached.cache_clear() # Cold start on first run
|
|
start = time.perf_counter()
|
|
valid_count = process_events(events)
|
|
times.append(time.perf_counter() - start)
|
|
|
|
avg = sum(times) / len(times)
|
|
print(f"Valid: {valid_count}")
|
|
print(f"Avg time: {avg:.3f}s")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|