-
-
Save hunter007VN/0695a1e1baa334e1d6f89e48d4e97587 to your computer and use it in GitHub Desktop.
How to get a stack trace from a stuck/hanging python script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # How to get a stack trace for each thread in a running python script | |
| Sometimes a python script will simply hang forever with no indication of where things went wrong. Perhaps it's polling a service that will never return a value that allows the program to move forward. Here's a way to see where the program is currently stuck. | |
| ## Install gdb and pyrasite | |
| Install gdb. | |
| ```sh | |
| # Redhat, CentOS, etc | |
| $ yum install gdb | |
| # Ubuntu, Debian, etc | |
| $ apt-get update && apt-get install gdb | |
| ``` | |
| Install pyrasite. | |
| ```sh | |
| $ pip install pyrasite | |
| ``` | |
| ## Inspect process with pyrasite | |
| Find the process ID for the stuck python process and run `pyrasite-shell` with it. | |
| ```sh | |
| # Assuming process ID is 12345 | |
| $ pyrasite-shell 12345 | |
| ``` | |
| You should now see a python REPL. Run the following in the REPL to see stack traces for all threads. | |
| ```python | |
| import sys, traceback | |
| for thread_id, frame in sys._current_frames().items(): | |
| print 'Stack for thread {}'.format(thread_id) | |
| traceback.print_stack(frame) | |
| print '' | |
| ``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment