私は、各要求 - 応答サイクルで呼び出されたすべての関数を格納して保存する必要があるプロジェクトを開発しています。変数の値を格納する必要はありません。格納する必要があるのは、パラメータとその実行順序で呼び出された関数だけです。私はmongodbを使ってこのトレースを保存しています。Pythonプログラムの実行フロー(関数呼び出しフロー)を格納する
0
A
答えて
1
便宜上、関数デコレータを使用できます。
import functools
import logging
def log_me(func):
@functools.wraps(func)
def inner(*args, **kwargs):
logging.debug('name: %s, args: %s, kwargs: %s', func.__name__, args, kwargs)
return func(*args, **kwargs)
return inner
次に、機能をログに記録してください。
@log_me
def test(x):
return x + 2
テストコール。
In [10]: test(3)
DEBUG:root:name: test, args: (3,), kwargs: {}
Out[10]: 5
あなたはlogging
moduleにはMongoDBのエントリ代わりに、直接の最初のログを保存したい場合は、データベース内のエントリを作成するコードとlogging.debug
行を置き換えることができます。
0
sys.settraceは、デバッグのための機能をトレースしますが、この問題を修正することができます。たぶんthisのようなもの -
import sys
def trace_calls(frame, event, arg):
if event != 'call':
return
co = frame.f_code
func_name = co.co_name
if func_name == 'write':
# Ignore write() calls from print statements
return
func_line_no = frame.f_lineno
func_filename = co.co_filename
caller = frame.f_back
caller_line_no = caller.f_lineno
caller_filename = caller.f_code.co_filename
print 'Call to %s on line %s of %s from line %s of %s' % \
(func_name, func_line_no, func_filename,
caller_line_no, caller_filename)
もprofilingを参照してください。プログラムのさまざまな部分が実行された頻度と時間について説明します
関連する問題
- 1. 待つ呼び出しは、プログラムの実行フローを停止さ
- 2. 非同期呼び出しのフロー実行/論理コンテキスト
- 3. if文と関数呼び出しの制御フロー
- 4. 非同期関数呼び出しがある場合のJavaScriptの同期フロー
- 5. 文字列に格納されたZEND実行/呼び出し関数
- 6. パペット実行フロー
- 7. Pythonプログラム内で他の関数を呼び出す/実行する方法
- 8. フロー実行Java JSsh
- 9. GCDシリアルスレッド実行フロー
- 10. メインスレッドで実行フロー
- 11. laravel MVC実行フロー
- 12. asyncio pythonで関数呼び出しを実行する方法
- 13. Pythonで格納された文字列から関数を呼び出す
- 14. Pythonの関数呼び出しをプログラムでビルドする方法
- 15. select文のインデックス実行フロー
- 16. NodeJSプロシージャの実行フロー
- 17. GWTでのRPC呼び出し後のフロー?
- 18. フローからの非同期HTTP呼び出しの作成
- 19. JavaクラスからのMuleフローの呼び出し - Springブート
- 20. Spring Webflowのフローで特定のビューステートを呼び出す
- 21. 他のストアドプロシージャを呼び出すストアドプロシージャ内の例外フロー
- 22. フローと関数の定義
- 23. javascript関数のフローをトレースする
- 24. コアで実行するgdb呼び出し関数を模倣するCプログラム
- 25. レコード要求実行フロー.net
- 26. ノードjs:再帰関数を順番に実行/制御フロー
- 27. cプログラム呼び出し関数の呼び出し
- 28. サーバーに格納されているPythonファイルを呼び出す
- 29. 辞書値として格納されている関数を呼び出す
- 30. フローで関数呼び出しのArityを0に制限する方法はありますか?
['sys.settrace'](https://docs.python.org/2/library/sys.html#sys。 settrace)関数を使用して、ニーズに合っているかどうかを確認します。 – jedwards
['logging'](https://docs.python.org/3/library/logging.html)モジュールを使用しない理由は何ですか? – Alex