我正在使用 Python 的 fusepy ctypes 库 ( https://github.com/terencehonles/fusepy ) 编写 FUSE 文件系统。有没有办法分析熔断器操作?当我尝试使用 cProfile 运行 FUSE 的实例化时,我得到不可用的输出:
924 function calls (911 primitive calls) in 5.575 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 5.575 5.575 <string>:1(<module>)
7 0.000 0.000 0.000 0.000 __init__.py:1209(debug)
2 0.000 0.000 0.000 0.000 __init__.py:1221(info)
9 0.000 0.000 0.000 0.000 __init__.py:1452(getEffectiveLevel)
9 0.000 0.000 0.000 0.000 __init__.py:1466(isEnabledFor)
1 0.000 0.000 0.000 0.000 __init__.py:239(load)
1 0.000 0.000 0.000 0.000 __init__.py:267(loads)
1 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__)
1 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__)
1 0.000 0.000 0.000 0.000 __init__.py:372(maketree)
1 0.000 0.000 5.573 5.573 __init__.py:384(mount)
1 0.000 0.000 0.000 0.000 __init__.py:388(_maketree)
2 0.000 0.000 0.000 0.000 __init__.py:42(normalize_encoding)
8 0.000 0.000 0.000 0.000 abc.py:377(get)
1 0.000 0.000 0.000 0.000 argparse.py:1184(__init__)
3 0.000 0.000 0.000 0.000 argparse.py:1200(__init__)
34 0.000 0.000 0.000 0.000 argparse.py:1252(register)
3 0.000 0.000 0.000 0.000 argparse.py:1256(_registry_get)
1 0.000 0.000 0.000 0.000 argparse.py:1281(add_argument)
2 0.000 0.000 0.000 0.000 argparse.py:1328(add_argument_group)
1 0.000 0.000 0.000 0.000 argparse.py:1338(_add_action)
1 0.000 0.000 0.000 0.000 argparse.py:1402(_get_positional_kwargs)
1 0.000 0.000 0.000 0.000 argparse.py:1454(_pop_action_class)
3 0.000 0.000 0.000 0.000 argparse.py:1458(_get_handler)
1 0.000 0.000 0.000 0.000 argparse.py:1467(_check_conflict)
2 0.000 0.000 0.000 0.000 argparse.py:1507(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:151(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:1529(_add_action)
1 0.000 0.000 0.001 0.001 argparse.py:1577(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:1613(identity)
1 0.000 0.000 0.000 0.000 argparse.py:1684(_add_action)
1 0.000 0.000 0.000 0.000 argparse.py:1696(_get_positional_actions)
1 0.000 0.000 0.000 0.000 argparse.py:1697(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:1704(parse_args)
1 0.000 0.000 0.000 0.000 argparse.py:1711(parse_known_args)
1 0.000 0.000 0.000 0.000 argparse.py:1749(_parse_known_args)
1 0.000 0.000 0.000 0.000 argparse.py:1796(take_action)
1 0.000 0.000 0.000 0.000 argparse.py:1894(consume_positionals)
1 0.000 0.000 0.000 0.000 argparse.py:194(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:1955(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:2032(_match_arguments_partial)
1 0.000 0.000 0.000 0.000 argparse.py:2038(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:2042(<listcomp>)
1 0.000 0.000 0.000 0.000 argparse.py:2048(_parse_optional)
1 0.000 0.000 0.000 0.000 argparse.py:2150(_get_nargs_pattern)
1 0.000 0.000 0.000 0.000 argparse.py:2194(_get_values)
1 0.000 0.000 0.000 0.000 argparse.py:2246(_get_value)
1 0.000 0.000 0.000 0.000 argparse.py:2272(_check_value)
1 0.000 0.000 0.000 0.000 argparse.py:2312(_get_formatter)
1 0.000 0.000 0.000 0.000 argparse.py:554(_metavar_formatter)
1 0.000 0.000 0.000 0.000 argparse.py:563(format)
1 0.000 0.000 0.000 0.000 argparse.py:570(_format_args)
1 0.000 0.000 0.000 0.000 argparse.py:784(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:826(__init__)
1 0.000 0.000 0.000 0.000 argparse.py:855(__call__)
1 0.000 0.000 0.000 0.000 codecs.py:238(__init__)
1 0.000 0.000 0.000 0.000 codecs.py:287(__init__)
1 0.000 0.000 0.000 0.000 codecs.py:297(decode)
1 0.000 0.000 5.574 5.574 commands.py:159(mount)
1 0.000 0.000 0.000 0.000 decoder.py:347(decode)
1 0.000 0.000 0.000 0.000 decoder.py:358(raw_decode)
6 0.000 0.000 0.000 0.000 functools.py:148(__init__)
8 0.000 0.000 0.000 0.000 functools.py:152(__hash__)
12 0.000 0.000 0.000 0.000 functools.py:155(_make_key)
18 0.000 0.000 0.000 0.000 functools.py:167(<genexpr>)
12/10 0.000 0.000 0.000 0.000 functools.py:241(wrapper)
1 5.573 5.573 5.573 5.573 fuse.py:334(__init__)
1 0.000 0.000 0.000 0.000 fuse.py:357(<listcomp>)
3 0.000 0.000 0.000 0.000 fuse.py:377(_normalize_fuse_options)
1 0.000 0.000 0.000 0.000 fuse.py:385(_wrapper)
1 0.000 0.000 0.000 0.000 fuse.py:603(destroy)
1 0.000 0.000 0.000 0.000 fuse.py:699(destroy)
1 0.000 0.000 0.000 0.000 fuse.py:823(__call__)
9 0.000 0.000 0.000 0.000 genericpath.py:15(exists)
4 0.000 0.000 0.000 0.000 gettext.py:111(_expand_lang)
2 0.000 0.000 0.000 0.000 gettext.py:353(find)
2 0.000 0.000 0.000 0.000 gettext.py:393(translation)
2 0.000 0.000 0.000 0.000 gettext.py:459(dgettext)
2 0.000 0.000 0.000 0.000 gettext.py:497(gettext)
4 0.000 0.000 0.000 0.000 locale.py:339(normalize)
1 0.000 0.000 0.000 0.000 locale.py:574(getpreferredencoding)
1 0.000 0.000 0.000 0.000 mount.py:34(__init__)
1 0.000 0.000 5.573 5.573 mount.py:419(mount)
9 0.000 0.000 0.000 0.000 os.py:668(__getitem__)
9 0.000 0.000 0.000 0.000 os.py:734(encode)
2 0.000 0.000 0.000 0.000 os.py:738(decode)
1 0.000 0.000 0.000 0.000 path.py:16(rootdir)
1 0.000 0.000 0.000 0.000 path.py:22(fuserootdir)
1 0.000 0.000 0.000 0.000 path.py:40(treefile)
1 0.000 0.000 0.000 0.000 path.py:46(ctreefile)
12 0.000 0.000 0.000 0.000 posixpath.py:38(_get_sep)
12 0.000 0.000 0.000 0.000 posixpath.py:71(join)
1 0.000 0.000 0.000 0.000 re.py:153(match)
5 0.000 0.000 0.000 0.000 re.py:212(compile)
1 0.000 0.000 0.000 0.000 re.py:264(_compile)
4/1 0.000 0.000 0.000 0.000 sre_compile.py:32(_compile)
2 0.000 0.000 0.000 0.000 sre_compile.py:357(_simple)
1 0.000 0.000 0.000 0.000 sre_compile.py:364(_compile_info)
2 0.000 0.000 0.000 0.000 sre_compile.py:470(isstring)
1 0.000 0.000 0.000 0.000 sre_compile.py:473(_code)
1 0.000 0.000 0.000 0.000 sre_compile.py:488(compile)
8 0.000 0.000 0.000 0.000 sre_parse.py:127(__len__)
17 0.000 0.000 0.000 0.000 sre_parse.py:131(__getitem__)
2 0.000 0.000 0.000 0.000 sre_parse.py:135(__setitem__)
4 0.000 0.000 0.000 0.000 sre_parse.py:139(append)
6/3 0.000 0.000 0.000 0.000 sre_parse.py:141(getwidth)
1 0.000 0.000 0.000 0.000 sre_parse.py:179(__init__)
10 0.000 0.000 0.000 0.000 sre_parse.py:184(__next)
7 0.000 0.000 0.000 0.000 sre_parse.py:203(match)
8 0.000 0.000 0.000 0.000 sre_parse.py:209(get)
2/1 0.000 0.000 0.000 0.000 sre_parse.py:340(_parse_sub)
2/1 0.000 0.000 0.000 0.000 sre_parse.py:418(_parse)
1 0.000 0.000 0.000 0.000 sre_parse.py:68(__init__)
1 0.000 0.000 0.000 0.000 sre_parse.py:702(fix_flags)
1 0.000 0.000 0.000 0.000 sre_parse.py:714(parse)
1 0.000 0.000 0.000 0.000 sre_parse.py:73(opengroup)
1 0.000 0.000 0.000 0.000 sre_parse.py:84(closegroup)
4 0.000 0.000 0.000 0.000 sre_parse.py:91(__init__)
1 0.000 0.000 0.000 0.000 tree.py:125(__init__)
1 0.000 0.000 0.000 0.000 tree.py:131(__iter__)
1 0.000 0.000 0.000 0.000 tree.py:145(files)
2 0.000 0.000 0.000 0.000 tree.py:57(__init__)
1 0.000 0.000 0.000 0.000 tree.py:70(__iter__)
2 0.000 0.000 0.000 0.000 tree.py:76(__setitem__)
1 0.000 0.000 0.000 0.000 tree.py:95(__init__)
3 0.000 0.000 0.000 0.000 {built-in method callable}
1 0.000 0.000 0.000 0.000 {built-in method compile}
1 0.000 0.000 5.575 5.575 {built-in method exec}
69 0.000 0.000 0.000 0.000 {built-in method getattr}
2 0.000 0.000 0.000 0.000 {built-in method getgid}
2 0.000 0.000 0.000 0.000 {built-in method getuid}
3 0.000 0.000 0.000 0.000 {built-in method hasattr}
6 0.000 0.000 0.000 0.000 {built-in method hash}
51 0.000 0.000 0.000 0.000 {built-in method isinstance}
3 0.000 0.000 0.000 0.000 {built-in method iter}
50/47 0.000 0.000 0.000 0.000 {built-in method len}
1 0.000 0.000 0.000 0.000 {built-in method listdir}
8 0.000 0.000 0.000 0.000 {built-in method min}
1 0.000 0.000 0.000 0.000 {built-in method nl_langinfo}
1 0.000 0.000 0.000 0.000 {built-in method open}
3 0.000 0.000 0.000 0.000 {built-in method ord}
1 0.000 0.000 0.000 0.000 {built-in method pointer}
2 0.000 0.000 0.000 0.000 {built-in method repr}
31 0.000 0.000 0.000 0.000 {built-in method setattr}
2 0.000 0.000 0.000 0.000 {built-in method signal}
1 0.000 0.000 0.000 0.000 {built-in method sizeof}
9 0.000 0.000 0.000 0.000 {built-in method stat}
2 0.000 0.000 0.000 0.000 {built-in method time}
1 0.000 0.000 0.000 0.000 {built-in method utf_8_decode}
2 0.000 0.000 0.000 0.000 {method 'add' of 'set' objects}
74 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
2 0.000 0.000 0.000 0.000 {method 'decode' of 'bytes' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
14 0.000 0.000 0.000 0.000 {method 'encode' of 'str' objects}
2 0.000 0.000 0.000 0.000 {method 'end' of '_sre.SRE_Match' objects}
27 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects}
3 0.000 0.000 0.000 0.000 {method 'extend' of 'list' objects}
12 0.000 0.000 0.000 0.000 {method 'find' of 'str' objects}
34 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects}
1 0.000 0.000 0.000 0.000 {method 'groups' of '_sre.SRE_Match' objects}
10 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects}
2 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}
5 0.000 0.000 0.000 0.000 {method 'join' of 'str' objects}
4 0.000 0.000 0.000 0.000 {method 'lower' of 'str' objects}
1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects}
3 0.000 0.000 0.000 0.000 {method 'match' of '_sre.SRE_Pattern' objects}
4 0.000 0.000 0.000 0.000 {method 'pop' of 'dict' objects}
1 0.000 0.000 0.000 0.000 {method 'read' of '_io.TextIOWrapper' objects}
2 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects}
8 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects}
4 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects}
41 0.000 0.000 0.000 0.000 {method 'setdefault' of 'dict' objects}
7 0.000 0.000 0.000 0.000 {method 'split' of 'str' objects}
29 0.000 0.000 0.000 0.000 {method 'startswith' of 'str' objects}
cProfile 仅将 fuse.py 作为一个整体进行分析,而不是单独计算 FUSE 操作。有没有办法分析 FUSE 操作?