Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /lib64/python2.7/Tools/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib64/python2.7/Tools/scripts/analyze_dxp.py
#! /usr/bin/python2.7
"""
Some helper functions to analyze the output of sys.getdxp() (which is
only available if Python was built with -DDYNAMIC_EXECUTION_PROFILE).
These will tell you which opcodes have been executed most frequently
in the current process, and, if Python was also built with -DDXPAIRS,
will tell you which instruction _pairs_ were executed most frequently,
which may help in choosing new instructions.

If Python was built without -DDYNAMIC_EXECUTION_PROFILE, importing
this module will raise a RuntimeError.

If you're running a script you want to profile, a simple way to get
the common pairs is:

$ PYTHONPATH=$PYTHONPATH:<python_srcdir>/Tools/scripts \
./python -i -O the_script.py --args
...
> from analyze_dxp import *
> s = render_common_pairs()
> open('/tmp/some_file', 'w').write(s)
"""

import copy
import opcode
import operator
import sys
import threading

if not hasattr(sys, "getdxp"):
    raise RuntimeError("Can't import analyze_dxp: Python built without"
                       " -DDYNAMIC_EXECUTION_PROFILE.")


_profile_lock = threading.RLock()
_cumulative_profile = sys.getdxp()

# If Python was built with -DDXPAIRS, sys.getdxp() returns a list of
# lists of ints.  Otherwise it returns just a list of ints.
def has_pairs(profile):
    """Returns True if the Python that produced the argument profile
    was built with -DDXPAIRS."""

    return len(profile) > 0 and isinstance(profile[0], list)


def reset_profile():
    """Forgets any execution profile that has been gathered so far."""
    with _profile_lock:
        sys.getdxp()  # Resets the internal profile
        global _cumulative_profile
        _cumulative_profile = sys.getdxp()  # 0s out our copy.


def merge_profile():
    """Reads sys.getdxp() and merges it into this module's cached copy.

    We need this because sys.getdxp() 0s itself every time it's called."""

    with _profile_lock:
        new_profile = sys.getdxp()
        if has_pairs(new_profile):
            for first_inst in range(len(_cumulative_profile)):
                for second_inst in range(len(_cumulative_profile[first_inst])):
                    _cumulative_profile[first_inst][second_inst] += (
                        new_profile[first_inst][second_inst])
        else:
            for inst in range(len(_cumulative_profile)):
                _cumulative_profile[inst] += new_profile[inst]


def snapshot_profile():
    """Returns the cumulative execution profile until this call."""
    with _profile_lock:
        merge_profile()
        return copy.deepcopy(_cumulative_profile)


def common_instructions(profile):
    """Returns the most common opcodes in order of descending frequency.

    The result is a list of tuples of the form
      (opcode, opname, # of occurrences)

    """
    if has_pairs(profile) and profile:
        inst_list = profile[-1]
    else:
        inst_list = profile
    result = [(op, opcode.opname[op], count)
              for op, count in enumerate(inst_list)
              if count > 0]
    result.sort(key=operator.itemgetter(2), reverse=True)
    return result


def common_pairs(profile):
    """Returns the most common opcode pairs in order of descending frequency.

    The result is a list of tuples of the form
      ((1st opcode, 2nd opcode),
       (1st opname, 2nd opname),
       # of occurrences of the pair)

    """
    if not has_pairs(profile):
        return []
    result = [((op1, op2), (opcode.opname[op1], opcode.opname[op2]), count)
              # Drop the row of single-op profiles with [:-1]
              for op1, op1profile in enumerate(profile[:-1])
              for op2, count in enumerate(op1profile)
              if count > 0]
    result.sort(key=operator.itemgetter(2), reverse=True)
    return result


def render_common_pairs(profile=None):
    """Renders the most common opcode pairs to a string in order of
    descending frequency.

    The result is a series of lines of the form:
      # of occurrences: ('1st opname', '2nd opname')

    """
    if profile is None:
        profile = snapshot_profile()
    def seq():
        for _, ops, count in common_pairs(profile):
            yield "%s: %s\n" % (count, ops)
    return ''.join(seq())
Name
Size
Permissions
Options
analyze_dxp.py
4.106 KB
-rwxr-xr-x
analyze_dxp.pyc
4.637 KB
-rw-r--r--
analyze_dxp.pyo
4.637 KB
-rw-r--r--
byext.py
3.852 KB
-rwxr-xr-x
byext.pyc
4.415 KB
-rw-r--r--
byext.pyo
4.415 KB
-rw-r--r--
byteyears.py
1.599 KB
-rwxr-xr-x
byteyears.pyc
1.365 KB
-rw-r--r--
byteyears.pyo
1.365 KB
-rw-r--r--
checkappend.py
4.548 KB
-rwxr-xr-x
checkappend.pyc
4.771 KB
-rw-r--r--
checkappend.pyo
4.771 KB
-rw-r--r--
checkpip.py
0.739 KB
-rwxr-xr-x
checkpip.pyc
1.02 KB
-rw-r--r--
checkpip.pyo
1.02 KB
-rw-r--r--
checkpyc.py
1.963 KB
-rwxr-xr-x
checkpyc.pyc
1.93 KB
-rw-r--r--
checkpyc.pyo
1.93 KB
-rw-r--r--
classfix.py
5.813 KB
-rwxr-xr-x
classfix.pyc
4.091 KB
-rw-r--r--
classfix.pyo
4.091 KB
-rw-r--r--
cleanfuture.py
8.376 KB
-rwxr-xr-x
cleanfuture.pyc
7.221 KB
-rw-r--r--
cleanfuture.pyo
7.188 KB
-rw-r--r--
combinerefs.py
4.277 KB
-rwxr-xr-x
combinerefs.pyc
4.156 KB
-rw-r--r--
combinerefs.pyo
4.124 KB
-rw-r--r--
copytime.py
0.647 KB
-rwxr-xr-x
copytime.pyc
0.915 KB
-rw-r--r--
copytime.pyo
0.915 KB
-rw-r--r--
crlf.py
0.596 KB
-rwxr-xr-x
crlf.pyc
0.835 KB
-rw-r--r--
crlf.pyo
0.835 KB
-rw-r--r--
cvsfiles.py
1.744 KB
-rwxr-xr-x
cvsfiles.pyc
2.112 KB
-rw-r--r--
cvsfiles.pyo
2.112 KB
-rw-r--r--
db2pickle.py
3.486 KB
-rwxr-xr-x
db2pickle.pyc
3.415 KB
-rw-r--r--
db2pickle.pyo
3.415 KB
-rw-r--r--
diff.py
2.018 KB
-rwxr-xr-x
diff.pyc
2.33 KB
-rw-r--r--
diff.pyo
2.33 KB
-rw-r--r--
dutree.py
1.577 KB
-rwxr-xr-x
dutree.pyc
2.178 KB
-rw-r--r--
dutree.pyo
2.178 KB
-rw-r--r--
eptags.py
1.448 KB
-rwxr-xr-x
eptags.pyc
1.832 KB
-rw-r--r--
eptags.pyo
1.832 KB
-rw-r--r--
find_recursionlimit.py
3.392 KB
-rwxr-xr-x
find_recursionlimit.pyc
5.54 KB
-rw-r--r--
find_recursionlimit.pyo
5.54 KB
-rw-r--r--
finddiv.py
2.458 KB
-rwxr-xr-x
finddiv.pyc
3.219 KB
-rw-r--r--
finddiv.pyo
3.219 KB
-rw-r--r--
findlinksto.py
1.044 KB
-rwxr-xr-x
findlinksto.pyc
1.392 KB
-rw-r--r--
findlinksto.pyo
1.392 KB
-rw-r--r--
findnocoding.py
2.742 KB
-rwxr-xr-x
findnocoding.pyc
3.126 KB
-rw-r--r--
findnocoding.pyo
3.126 KB
-rw-r--r--
fixcid.py
9.761 KB
-rwxr-xr-x
fixcid.pyc
7.667 KB
-rw-r--r--
fixcid.pyo
7.667 KB
-rw-r--r--
fixdiv.py
13.517 KB
-rwxr-xr-x
fixdiv.pyc
13.524 KB
-rw-r--r--
fixdiv.pyo
13.443 KB
-rw-r--r--
fixheader.py
1.161 KB
-rwxr-xr-x
fixheader.pyc
1.437 KB
-rw-r--r--
fixheader.pyo
1.437 KB
-rw-r--r--
fixnotice.py
2.979 KB
-rwxr-xr-x
fixnotice.pyc
3.418 KB
-rw-r--r--
fixnotice.pyo
3.418 KB
-rw-r--r--
fixps.py
0.872 KB
-rwxr-xr-x
fixps.pyc
0.946 KB
-rw-r--r--
fixps.pyo
0.946 KB
-rw-r--r--
google.py
0.507 KB
-rwxr-xr-x
google.pyc
0.773 KB
-rw-r--r--
google.pyo
0.773 KB
-rw-r--r--
gprof2html.py
2.116 KB
-rwxr-xr-x
gprof2html.pyc
2.224 KB
-rw-r--r--
gprof2html.pyo
2.224 KB
-rw-r--r--
h2py.py
5.813 KB
-rwxr-xr-x
h2py.pyc
4.289 KB
-rw-r--r--
h2py.pyo
4.289 KB
-rw-r--r--
hotshotmain.py
1.448 KB
-rwxr-xr-x
hotshotmain.pyc
1.819 KB
-rw-r--r--
hotshotmain.pyo
1.819 KB
-rw-r--r--
ifdef.py
3.631 KB
-rwxr-xr-x
ifdef.pyc
2.212 KB
-rw-r--r--
ifdef.pyo
2.212 KB
-rw-r--r--
lfcr.py
0.604 KB
-rwxr-xr-x
lfcr.pyc
0.859 KB
-rw-r--r--
lfcr.pyo
0.859 KB
-rw-r--r--
linktree.py
2.367 KB
-rwxr-xr-x
linktree.pyc
1.978 KB
-rw-r--r--
linktree.pyo
1.978 KB
-rw-r--r--
lll.py
0.725 KB
-rwxr-xr-x
lll.pyc
0.92 KB
-rw-r--r--
lll.pyo
0.92 KB
-rw-r--r--
logmerge.py
5.444 KB
-rwxr-xr-x
logmerge.pyc
4.964 KB
-rw-r--r--
logmerge.pyo
4.964 KB
-rw-r--r--
mailerdaemon.py
7.756 KB
-rwxr-xr-x
mailerdaemon.pyc
7.191 KB
-rw-r--r--
mailerdaemon.pyo
7.191 KB
-rw-r--r--
md5sum.py
2.329 KB
-rwxr-xr-x
md5sum.pyc
2.849 KB
-rw-r--r--
md5sum.pyo
2.849 KB
-rw-r--r--
methfix.py
5.334 KB
-rwxr-xr-x
methfix.pyc
4.028 KB
-rw-r--r--
methfix.pyo
4.028 KB
-rw-r--r--
mkreal.py
1.589 KB
-rwxr-xr-x
mkreal.pyc
1.934 KB
-rw-r--r--
mkreal.pyo
1.934 KB
-rw-r--r--
ndiff.py
3.719 KB
-rwxr-xr-x
ndiff.pyc
3.769 KB
-rw-r--r--
ndiff.pyo
3.769 KB
-rw-r--r--
nm2def.py
2.386 KB
-rwxr-xr-x
nm2def.pyc
2.891 KB
-rw-r--r--
nm2def.pyo
2.891 KB
-rw-r--r--
objgraph.py
5.876 KB
-rwxr-xr-x
objgraph.pyc
4.817 KB
-rw-r--r--
objgraph.pyo
4.817 KB
-rw-r--r--
parseentities.py
1.679 KB
-rwxr-xr-x
parseentities.pyc
2.028 KB
-rw-r--r--
parseentities.pyo
2.028 KB
-rw-r--r--
patchcheck.py
7.499 KB
-rwxr-xr-x
patchcheck.pyc
8.914 KB
-rw-r--r--
patchcheck.pyo
8.914 KB
-rw-r--r--
pathfix.py
4.228 KB
-rwxr-xr-x
pathfix.pyc
3.748 KB
-rw-r--r--
pathfix.pyo
3.748 KB
-rw-r--r--
pdeps.py
3.844 KB
-rwxr-xr-x
pdeps.pyc
3.145 KB
-rw-r--r--
pdeps.pyo
3.145 KB
-rw-r--r--
pickle2db.py
3.85 KB
-rwxr-xr-x
pickle2db.pyc
3.729 KB
-rw-r--r--
pickle2db.pyo
3.729 KB
-rw-r--r--
pindent.py
16.768 KB
-rwxr-xr-x
pindent.pyc
11.288 KB
-rw-r--r--
pindent.pyo
11.288 KB
-rw-r--r--
ptags.py
1.195 KB
-rwxr-xr-x
ptags.pyc
1.374 KB
-rw-r--r--
ptags.pyo
1.374 KB
-rw-r--r--
pysource.py
3.756 KB
-rwxr-xr-x
pysource.pyc
3.915 KB
-rw-r--r--
pysource.pyo
3.915 KB
-rw-r--r--
redemo.py
5.656 KB
-rwxr-xr-x
redemo.pyc
5.126 KB
-rw-r--r--
redemo.pyo
5.126 KB
-rw-r--r--
reindent-rst.py
0.271 KB
-rwxr-xr-x
reindent-rst.pyc
0.47 KB
-rw-r--r--
reindent-rst.pyo
0.47 KB
-rw-r--r--
reindent.py
11.149 KB
-rwxr-xr-x
reindent.pyc
9.403 KB
-rw-r--r--
reindent.pyo
9.365 KB
-rw-r--r--
rgrep.py
1.457 KB
-rwxr-xr-x
rgrep.pyc
1.837 KB
-rw-r--r--
rgrep.pyo
1.837 KB
-rw-r--r--
serve.py
1.12 KB
-rwxr-xr-x
serve.pyc
1.56 KB
-rw-r--r--
serve.pyo
1.56 KB
-rw-r--r--
setup.py
0.411 KB
-rw-r--r--
setup.pyc
0.535 KB
-rw-r--r--
setup.pyo
0.535 KB
-rw-r--r--
suff.py
0.606 KB
-rwxr-xr-x
suff.pyc
0.883 KB
-rw-r--r--
suff.pyo
0.883 KB
-rw-r--r--
svneol.py
2.861 KB
-rwxr-xr-x
svneol.pyc
2.836 KB
-rw-r--r--
svneol.pyo
2.759 KB
-rw-r--r--
texcheck.py
9.039 KB
-rw-r--r--
texcheck.pyc
8.18 KB
-rw-r--r--
texcheck.pyo
8.18 KB
-rw-r--r--
texi2html.py
68.188 KB
-rwxr-xr-x
texi2html.pyc
81.37 KB
-rw-r--r--
texi2html.pyo
81.37 KB
-rw-r--r--
treesync.py
5.647 KB
-rwxr-xr-x
treesync.pyc
5.85 KB
-rw-r--r--
treesync.pyo
5.85 KB
-rw-r--r--
untabify.py
1.187 KB
-rwxr-xr-x
untabify.pyc
1.546 KB
-rw-r--r--
untabify.pyo
1.546 KB
-rw-r--r--
which.py
1.592 KB
-rwxr-xr-x
which.pyc
1.594 KB
-rw-r--r--
which.pyo
1.594 KB
-rw-r--r--
win_add2path.py
1.582 KB
-rw-r--r--
win_add2path.pyc
2.021 KB
-rw-r--r--
win_add2path.pyo
2.021 KB
-rw-r--r--
xxci.py
2.731 KB
-rwxr-xr-x
xxci.pyc
3.923 KB
-rw-r--r--
xxci.pyo
3.923 KB
-rw-r--r--