程序不退出。如何找出python在做什么?

2024-05-03 08:10:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,目前运行良好。但是,我的程序没有正确退出。我可以调试到最后,但程序仍在运行。

main.main()做了很多工作:它从数据提供程序下载(http、ftp、sftp,…)一些csv文件,将数据转换为标准文件格式,并将每次加载到数据库中。

这很管用。但是,程序不会退出。我怎样才能知道,程序在哪里“等待”? 存在多个提供程序-除一个提供程序外,所有提供程序的脚本都正确终止(sftp下载,我正在使用paramiko)

if __name__ == "__main__":

    main.log = main.log2both
    filestoconvert = []
    #filestoconvert = glob.glob(r'C:\Data\Feed\ProviderName\download\*.csv')
    main.main(['ProviderName'], ['download', 'convert', 'load'], filestoconvert)

我很高兴有任何想法和想法!


Tags: 文件csv数据程序脚本数据库http标准
3条回答

最好使用GDB,它允许精确定位挂起的进程,比如Java中的jstack

如果您的程序没有终止,很可能意味着您有一个线程仍在工作。

要列出可以使用的所有正在运行的线程:

threading.enumerate()

此函数列出当前运行的所有线程(请参见documentation

如果这还不够,您可能需要一些脚本和函数(请参见documentation):

sys._current_frames()

所以要打印所有活动线程的stacktrace,您可以执行以下操作:

import sys, traceback, threading
thread_names = {t.ident: t.name for t in threading.enumerate()}
for thread_id, frame in sys._current_frames().iteritems():
    print("Thread %s:" % thread_names.get(thread_id, thread_id))
    traceback.print_stack(frame)
    print()

祝你好运!

您可以使用^{}来确定哪些函数块。然后可以使用^{}单步执行。

相关问题 更多 >