剖析fuse-python

exh*_*uma 3 python profiling signals fuse

我目前正在使用fuse-python编写保险丝.它已经做了应有的事情.然而,在它安装几周后,它变得明显变慢.所以我想描述一下.我知道可以优化的几点.但这些不应该是罪魁祸首.

但是,fuse-python在无限循环中挂起(参见保险丝源的第733行和第757行).如果我在调试模式下运行fuse(使用-d开关),它将在前台运行.但是,我不能阻止它SIGINT,也不符合CTRL+C(这是无论如何相同).

我试图使用该signal模块来捕获主线程中的信号.但这也不起作用.有趣的是,有一次我拍的过程下来SIGKILL,我看到KeyboardInterruptstdout.此外,在a之后SIGKILL,信号处理程序按预期执行.

这会对分析产生影响.由于进程永远不会正常终止,因此cProfile永远不会有机会保存stats文件.

有任何想法吗?

Mat*_*ner 8

Python的安装可提高处理程序KeyboardInterruptSIGINT.如果在调用fuse的main时检测到非默认信号处理程序,它将不会用自己的处理程序替换处理程序,通常会调用fuse_session_exit清理它.在您调用保险丝的主要部分后,KeyboardInterruptCFUNCTYPE包装器吞没,您永远不会看到它们.

您的选择是:

  • 发送SIGQUITCtrl+ \或之外的任何其他终止信号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探查器将能够按正常方式保存统计信息.