gpt4 book ai didi

python - 如何在 Python 中识别无法使用 CTRL + C 中断的代码的原因

转载 作者:行者123 更新时间:2023-11-28 18:49:05 26 4
gpt4 key购买 nike

我正在使用请求来提取一些文件。我注意到程序似乎在经过从 5K 到 20K 不等的大量迭代后挂起。我可以说它挂了,因为存储结果的文件夹在几个小时内没有改变。我一直试图通过按 CTRL + C 来中断进程(我正在使用 IDLE),但无济于事。我想中断而不是终止进程,因为重启更容易。我终于不得不终止这个过程。我重新启动,它再次运行良好,直到出现相同的症状。我想弄清楚如何诊断问题,但由于我必须杀死所有东西,所以我不知道从哪里开始。

是否有其他方法可以查看正在发生的事情或更有效地中断进程?

我一直在假设,如果我可以在不杀死的情况下中断,我可以查看全局变量或者做一些其他的事情来弄清楚我的代码卡在哪里。

最佳答案

万一还不算太晚:我刚刚遇到了同样的问题并且有一些提示

第一件事:在 python 中,大多数等待的 api 是不可中断的(即 Thread.join()、Lock.acquire()...)。查看这些页面以获取更多信息: http://snakesthatbite.blogspot.fr/2010/09/cpython-threading-interrupting.html http://docs.python.org/2/library/thread.html

那么如果一个线程正在等待这样的调用,它就不能被停止。还有一件事要知道:如果一个普通线程正在运行(或挂起),主程序将无限期地停留,直到所有线程停止或进程被终止。

为避免这种情况,您可以将线程设置为守护线程:在调用 Thread.start() 之前设置 Thread.daemon=True。

第二,要找到您的程序挂起的位置,您可以使用调试器启动它,但我更喜欢日志记录,因为日志总是存在的,以防调试太晚。

尝试在每次等待调用之前和之后记录日志,以查看您的线程被挂起的时间。要获得高质量的日志,请使用配置了文件处理程序、html 处理程序的 python 日志记录,或者使用 syslog 处理程序配置得更好。

关于python - 如何在 Python 中识别无法使用 CTRL + C 中断的代码的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com