def setUp(self): super(GeventTest, self).setUp() yappi.set_clock_type("cpu") yappi.set_context_backend("greenlet") yappi.set_context_name_callback(self.get_greenlet_name) gevent.getcurrent().name = "Main" gevent.get_hub().name = "Hub"
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 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 test_callback_non_string(self): self.callback_count = 0 def callback(): self.callback_count += 1 return 1 # Supposed to return a string. yappi.set_context_name_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_name_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 'name' yappi.set_context_name_callback(callback) yappi.start() a() yappi.set_context_name_callback(None) old_callback_count = self.callback_count a() yappi.stop() self.assertEqual(old_callback_count, self.callback_count)
def test_callback_none_return(self): self.callback_count = 0 def callback(): self.callback_count += 1 if self.callback_count < 3: return None # yappi will call again else: return "name" yappi.set_context_name_callback(callback) yappi.start() a() a() yappi.stop() # yappi tried again until a string was returned self.assertEqual(3, 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_name_callback(None) super(ContextNameCallbackTest, self).tearDown()