def test_callback(self): self.context_id = 0 yappi.set_context_id_callback(lambda: self.context_id) yappi.start() a() self.context_id = 1 a() self.context_id = 2 a() # Re-schedule context 1. self.context_id = 1 a() yappi.stop() threadstats = yappi.get_thread_stats().sort('id', 'ascending') self.assertEqual(3, len(threadstats)) self.assertEqual(0, threadstats[0].id) self.assertEqual(1, threadstats[1].id) self.assertEqual(2, threadstats[2].id) self.assertEqual(1, threadstats[0].sched_count) self.assertEqual(2, threadstats[1].sched_count) # Context 1 ran twice. self.assertEqual(1, threadstats[2].sched_count) funcstats = yappi.get_func_stats() self.assertEqual(4, utils.find_stat_by_name(funcstats, 'a').ncall)
def test_pause_resume(self): yappi.set_context_id_callback(lambda: self.context_id) yappi.set_clock_type('wall') # Start in context 0. self.context_id = 0 yappi.start() time.sleep(0.08) # Switch to context 1. self.context_id = 1 time.sleep(0.05) # Switch back to context 0. self.context_id = 0 time.sleep(0.07) yappi.stop() t_stats = yappi.get_thread_stats().sort('id', 'ascending') self.assertEqual(2, len(t_stats)) self.assertEqual(0, t_stats[0].id) self.assertEqual(2, t_stats[0].sched_count) self.assertTrue(0.15 < t_stats[0].ttot < 0.3) self.assertEqual(1, t_stats[1].id) self.assertEqual(1, t_stats[1].sched_count) # Context 1 was first scheduled 0.08 sec after context 0. self.assertTrue(0.1 < t_stats[1].ttot < 0.2 )
def start(self): yappi.set_context_id_callback(lambda:id(greenlet.getcurrent())) yappi.set_context_name_callback(lambda:greenlet.getcurrent().__class__.__name__) yappi.set_clock_type('cpu') yappi.start(builtins=True) self._isStart = True return 'success'
def setUp(self): # reset everything back to default yappi.stop() yappi.clear_stats() yappi.set_clock_type('cpu') # reset to default clock type yappi.set_context_id_callback(None) yappi.set_context_name_callback(None)
def test_profile_single_context(self): def id_callback(): return self.callback_count def a(): pass self.callback_count = 1 yappi.set_context_id_callback(id_callback) yappi.start(profile_threads=False) a() # context-id:1 self.callback_count = 2 a() # context-id:2 stats = yappi.get_func_stats() fsa = utils.find_stat_by_name(stats, "a") self.assertEqual(fsa.ncall, 1) yappi.stop() yappi.clear_stats() self.callback_count = 1 yappi.start() # profile_threads=True a() # context-id:1 self.callback_count = 2 a() # context-id:2 stats = yappi.get_func_stats() fsa = utils.find_stat_by_name(stats, "a") self.assertEqual(fsa.ncall, 2)
def setUp(self): # reset everything back to default yappi.stop() yappi.clear_stats() yappi.set_clock_type('cpu') # reset to default clock type yappi.set_context_id_callback(None) yappi.set_context_name_callback(None) yappi.set_tag_callback(None)
def stop(self): if self._isStart: yappi.stop() yappi.set_context_id_callback(None) self._isStart = False if not os.path.exists(self._path): os.mkdir(self._path) stats = yappi.get_func_stats() fullPath = self._path + "/callgrind." + self._serviceName stats.save(fullPath, type='callgrind') return 'success' return 'fail'
def test_callback_non_integer(self): self.callback_count = 0 def callback(): self.callback_count += 1 return None # Supposed to return an integer. yappi.set_context_id_callback(callback) yappi.start() a() a() yappi.stop() # Callback was cleared after first error. self.assertEqual(1, self.callback_count)
def test_callback_error(self): self.callback_count = 0 def callback(): self.callback_count += 1 raise Exception('callback error') yappi.set_context_id_callback(callback) yappi.start() a() a() yappi.stop() # Callback was cleared after first error. self.assertEqual(1, self.callback_count)
def test_clear_callback(self): self.callback_count = 0 def callback(): self.callback_count += 1 return 1 yappi.set_context_id_callback(callback) yappi.start() a() yappi.set_context_id_callback(None) old_callback_count = self.callback_count a() yappi.stop() self.assertEqual(old_callback_count, self.callback_count)
def start(builtins=False, profile_threads=True): """Starts profiling all threads and all greenlets. This function can be called from any thread at any time. Resumes profiling if stop() was called previously. * `builtins`: Profile builtin functions used by standart Python modules. * `profile_threads`: Profile all threads if ``True``, else profile only the calling thread. """ # TODO: what about builtins False or profile_threads False? yappi.set_context_id_callback( lambda: greenlet and id(greenlet.getcurrent()) or 0) yappi.set_context_name_callback( lambda: greenlet and greenlet.getcurrent().__class__.__name__ or '') yappi.start(builtins, profile_threads)
def _capture_profile(fname=''): if not fname: yappi.set_clock_type('cpu') # We need to set context to greenlet to profile greenlets # https://bitbucket.org/sumerc/yappi/pull-requests/3 yappi.set_context_id_callback(lambda: id(greenlet.getcurrent())) yappi.set_context_name_callback( lambda: greenlet.getcurrent().__class__.__name__) yappi.start() else: yappi.stop() stats = yappi.get_func_stats() # User should provide filename. This file with a suffix .prof # will be created in temp directory. try: stats_file = os.path.join(tempfile.gettempdir(), fname + '.prof') stats.save(stats_file, "pstat") except Exception as e: print("Error while saving the trace stats ", str(e)) finally: yappi.clear_stats()
def _capture_profile(fname=''): if not fname: yappi.set_clock_type('cpu') # We need to set context to greenlet to profile greenlets # https://bitbucket.org/sumerc/yappi/pull-requests/3 yappi.set_context_id_callback( lambda: id(greenlet.getcurrent())) yappi.set_context_name_callback( lambda: greenlet.getcurrent().__class__.__name__) yappi.start() else: yappi.stop() stats = yappi.get_func_stats() # User should provide filename. This file with a suffix .prof # will be created in temp directory. try: stats_file = os.path.join(tempfile.gettempdir(), fname + '.prof') stats.save(stats_file, "pstat") except Exception as e: print("Error while saving the trace stats ", str(e)) finally: yappi.clear_stats()
def test_callback(self): self.context_id = 0 self.context_name = 'a' yappi.set_context_id_callback(lambda: self.context_id) yappi.set_context_name_callback(lambda: self.context_name) yappi.start() a() self.context_id = 1 self.context_name = 'b' a() # Re-schedule context 0. self.context_id = 0 self.context_name = 'a' a() yappi.stop() threadstats = yappi.get_thread_stats().sort('name', 'ascending') self.assertEqual(2, len(threadstats)) self.assertEqual(0, threadstats[0].id) self.assertEqual('a', threadstats[0].name) self.assertEqual(1, threadstats[1].id) self.assertEqual('b', threadstats[1].name)
def tearDown(self): yappi.set_context_id_callback(None) super(ShiftContextTimeTest, self).tearDown()
def tearDown(self): yappi.set_context_id_callback(None) super(ContextIdCallbackTest, self).tearDown()