| from abc import ABC, abstractmethod | |
| class Collector(ABC): | |
| @abstractmethod | |
| def collect(self, stack_frames): | |
| """Collect profiling data from stack frames.""" | |
| @abstractmethod | |
| def export(self, filename): | |
| """Export collected data to a file.""" | |
| def _iter_all_frames(self, stack_frames): | |
| """Iterate over all frame stacks from all interpreters and threads.""" | |
| for interpreter_info in stack_frames: | |
| for thread_info in interpreter_info.threads: | |
| frames = thread_info.frame_info | |
| if frames: | |
| yield frames |