How can I profile a multithread program in Python?

前端 未结 7 617
囚心锁ツ
囚心锁ツ 2020-11-30 04:12

I\'m developing an inherently multithreaded module in Python, and I\'d like to find out where it\'s spending its time. cProfile only seems to profile the main thread. Is the

相关标签:
7条回答
  • 2020-11-30 04:53

    Instead of running one cProfile, you could run separate cProfile instance in each thread, then combine the stats. Stats.add() does this automatically.

    0 讨论(0)
  • 2020-11-30 04:53

    Given that your different threads' main functions differ, you can use the very helpful profile_func() decorator from here.

    0 讨论(0)
  • 2020-11-30 04:54

    I don't know any profiling-application that supports such thing for python - but You could write a Trace-class that writes log-files where you put in the information of when an operation is started and when it ended and how much time it consumed.

    It's a simple and quick solution for your problem.

    0 讨论(0)
  • 2020-11-30 04:56

    Check out mtprof from the Dask project:

    https://github.com/dask/mtprof

    It's a drop-in replacement for cProfile that, if your threads are launched in the usual way and complete before your main thread, will roll-up their stats into the same reporting stats. Worked like a charm for me.

    0 讨论(0)
  • 2020-11-30 05:13

    If you're okay with doing a bit of extra work, you can write your own profiling class that implements profile(self, frame, event, arg). That gets called whenever a function is called, and you can fairly easily set up a structure to gather statistics from that.

    You can then use threading.setprofile to register that function on every thread. When the function is called you can use threading.currentThread() to see which it's running on. More information (and ready-to-run recipe) here:

    http://code.activestate.com/recipes/465831/

    http://docs.python.org/library/threading.html#threading.setprofile

    0 讨论(0)
  • 2020-11-30 05:15

    Please see yappi (Yet Another Python Profiler).

    0 讨论(0)
提交回复
热议问题