3

私は現在、fuse-pythonを使用してヒューズを書いています。それはすでにそれがすべきことをしている。ただし、数週間マウントした後は、著しく遅くなります。だから私はそれをプロファイリングしたかった。私はそれが最適化されることができるいくつかのポイントについて知っています。しかし、これらは犯人であってはなりません。

ただし、fuse-pythonは無限ループでハングします(ヒューズソースの733行目と757行目を参照)。(スイッチを使用して)デバッグモードでfuseを-d実行すると、フォアグラウンドで実行されます。しかし、私はそれを止めることSIGINTも、止めることもできませんCTRL+C(とにかく同じです)。

signalモジュールを使用して、メインスレッドでシグナルをトラップしようとしました。しかし、これも機能しません。興味深いことに、プロセスをで撃墜するとSIGKILL、が表示KeyboardInterruptされstdoutます。また、の後にSIGKILL、シグナルハンドラーが期待どおりに実行されます。

これはプロファイリングに影響を及ぼします。プロセスが正常に終了することはcProfileないため、統計ファイルを保存する機会はありません。

何か案は?

4

1 に答える 1

8

Pythonは、を発生せるハンドラーをインストールしますKeyboardInterruptSIGINT。ヒューズのメインが呼び出されたときにデフォルト以外のシグナルハンドラーが検出された場合、ハンドラーはそれ自体のハンドラーに置き換えられません。これは通常、を呼び出しfuse_session_exitクリーンアップします。ヒューズのメインを呼び出した後、KeyboardInterruptはラッパーに飲み込まれCFUNCTYPE、それらは表示されません。

オプションは次のとおりです。

  • + 、または。以外のその他の終了信号SIGQUITを押して送信します。ただし、ヒューズはきれいに出ません。Ctrl\SIGINT
  • ヒューズのメインを呼び出す前にデフォルトのシグナルハンドラーをインストールし、SIGINT完了したら元のシグナルハンドラーを復元します。

old_handler =signal(SIGINT, SIG_DFL)
# call main
signal(SIGINT, old_handler)

また、別のバインディングに切り替えることを強くお勧めします。fuse-pythonはひどく乱雑で、操作が困難です。私はfusepyで多くの幸運を手に入れ、そこにいくつかのパッチを提出しました。

キャッチされていないシグナルを使用せずにFUSEインスタンスを終了できる場合、Pythonプロファイラーは通常どおり統計を保存できます。

于 2011-02-18T17:46:20.390 に答える