exh*_*uma 3 python profiling signals fuse
我目前正在使用fuse-python编写保险丝.它已经做了应有的事情.然而,在它安装几周后,它变得明显变慢.所以我想描述一下.我知道可以优化的几点.但这些不应该是罪魁祸首.
但是,fuse-python在无限循环中挂起(参见保险丝源的第733行和第757行).如果我在调试模式下运行fuse(使用-d开关),它将在前台运行.但是,我不能阻止它SIGINT,也不符合CTRL+C(这是无论如何相同).
我试图使用该signal模块来捕获主线程中的信号.但这也不起作用.有趣的是,有一次我拍的过程下来SIGKILL,我看到KeyboardInterrupt的stdout.此外,在a之后SIGKILL,信号处理程序按预期执行.
这会对分析产生影响.由于进程永远不会正常终止,因此cProfile永远不会有机会保存stats文件.
有任何想法吗?
Python的安装可提高处理程序KeyboardInterrupt上SIGINT.如果在调用fuse的main时检测到非默认信号处理程序,它将不会用自己的处理程序替换处理程序,通常会调用fuse_session_exit并清理它.在您调用保险丝的主要部分后,KeyboardInterrupt被CFUNCTYPE包装器吞没,您永远不会看到它们.
您的选择是:
SIGQUIT按Ctrl+ \或之外的任何其他终止信号SIGINT.但是保险丝不会干净地退出.SIGINT在调用fuse的main之前安装默认信号处理程序,并在完成后恢复原始信号.old_handler =signal(SIGINT, SIG_DFL)
# call main
signal(SIGINT, old_handler)
Run Code Online (Sandbox Code Playgroud)
我强烈建议您切换到替代绑定,fuse-python非常混乱,难以使用.我和fusepy有很多运气,并在那里提交了一些补丁.
当您能够在不使用未捕获信号的情况下终止FUSE实例时,Python探查器将能够按正常方式保存统计信息.