def test_run_with_real_frame(self): # Start a thread and sample a frame from it. from slowlog.compat import Queue from slowlog.compat import get_ident import threading start_queue = Queue() end_queue = Queue() def run(): start_queue.put(get_ident()) end_queue.get() th = threading.Thread(target=run) th.start() try: ident = start_queue.get() # Wait for the thread to start. obj = self._make() obj.queue = self._make_nosleep_queue() reporter = self._make_reporter(report_at=1234.0, ident=ident) obj.reporters.add(reporter) obj.run(time=lambda: 1234.1) finally: end_queue.put(None) # Let the thread end. th.join() self.assertEqual(len(self.reported), 1) report_time, frame = self.reported[0] self.assertEqual(report_time, 1234.1) self.assertIsNotNone(frame) self.assertIsNotNone(frame.f_code.co_filename) self.assertIsNotNone(frame.f_code.co_name) self.assertEqual(len(self.queue_gets), 1) t = self.queue_gets[0][1] self.assertEqual(t, 10.0)
def __init__(self): super(Monitor, self).__init__(name='slowlog_monitor') self.setDaemon(True) self.queue = Queue() # Thread communication: [(reporter, add) or None] self.reporters = set() # set([Reporter])