# Copyright (C) 2001-2018, Python Software Foundation # For licence information, see README file. # msgid "" msgstr "" "Project-Id-Version: Python 3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-04-14 13:19+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: FRENCH \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: library/profile.rst:5 msgid "The Python Profilers" msgstr "" #: library/profile.rst:7 msgid "**Source code:** :source:`Lib/profile.py` and :source:`Lib/pstats.py`" msgstr "" #: library/profile.rst:14 msgid "Introduction to the profilers" msgstr "" #: library/profile.rst:20 msgid "" ":mod:`cProfile` and :mod:`profile` provide :dfn:`deterministic profiling` of " "Python programs. A :dfn:`profile` is a set of statistics that describes how " "often and for how long various parts of the program executed. These " "statistics can be formatted into reports via the :mod:`pstats` module." msgstr "" #: library/profile.rst:25 msgid "" "The Python standard library provides two different implementations of the " "same profiling interface:" msgstr "" #: library/profile.rst:28 msgid "" ":mod:`cProfile` is recommended for most users; it's a C extension with " "reasonable overhead that makes it suitable for profiling long-running " "programs. Based on :mod:`lsprof`, contributed by Brett Rosen and Ted " "Czotter." msgstr "" #: library/profile.rst:33 msgid "" ":mod:`profile`, a pure Python module whose interface is imitated by :mod:" "`cProfile`, but which adds significant overhead to profiled programs. If " "you're trying to extend the profiler in some way, the task might be easier " "with this module. Originally designed and written by Jim Roskind." msgstr "" #: library/profile.rst:40 msgid "" "The profiler modules are designed to provide an execution profile for a " "given program, not for benchmarking purposes (for that, there is :mod:" "`timeit` for reasonably accurate results). This particularly applies to " "benchmarking Python code against C code: the profilers introduce overhead " "for Python code, but not for C-level functions, and so the C code would seem " "faster than any Python one." msgstr "" #: library/profile.rst:51 msgid "Instant User's Manual" msgstr "" #: library/profile.rst:53 msgid "" "This section is provided for users that \"don't want to read the manual.\" " "It provides a very brief overview, and allows a user to rapidly perform " "profiling on an existing application." msgstr "" #: library/profile.rst:57 msgid "To profile a function that takes a single argument, you can do::" msgstr "" #: library/profile.rst:63 msgid "" "(Use :mod:`profile` instead of :mod:`cProfile` if the latter is not " "available on your system.)" msgstr "" #: library/profile.rst:66 msgid "" "The above action would run :func:`re.compile` and print profile results like " "the following::" msgstr "" #: library/profile.rst:83 msgid "" "The first line indicates that 214 calls were monitored. Of those calls, 207 " "were :dfn:`primitive`, meaning that the call was not induced via recursion. " "The next line: ``Ordered by: cumulative time``, indicates that the text " "string in the far right column was used to sort the output. The column " "headings include:" msgstr "" #: library/profile.rst:89 msgid "ncalls" msgstr "" #: library/profile.rst:89 msgid "for the number of calls." msgstr "" #: library/profile.rst:93 msgid "tottime" msgstr "" #: library/profile.rst:92 msgid "" "for the total time spent in the given function (and excluding time made in " "calls to sub-functions)" msgstr "" #: library/profile.rst:103 msgid "percall" msgstr "" #: library/profile.rst:96 msgid "is the quotient of ``tottime`` divided by ``ncalls``" msgstr "" #: library/profile.rst:100 msgid "cumtime" msgstr "" #: library/profile.rst:99 msgid "" "is the cumulative time spent in this and all subfunctions (from invocation " "till exit). This figure is accurate *even* for recursive functions." msgstr "" #: library/profile.rst:103 msgid "is the quotient of ``cumtime`` divided by primitive calls" msgstr "" #: library/profile.rst:106 msgid "filename:lineno(function)" msgstr "" #: library/profile.rst:106 msgid "provides the respective data of each function" msgstr "" #: library/profile.rst:108 msgid "" "When there are two numbers in the first column (for example ``3/1``), it " "means that the function recursed. The second value is the number of " "primitive calls and the former is the total number of calls. Note that when " "the function does not recurse, these two values are the same, and only the " "single figure is printed." msgstr "" #: library/profile.rst:114 msgid "" "Instead of printing the output at the end of the profile run, you can save " "the results to a file by specifying a filename to the :func:`run` function::" msgstr "" #: library/profile.rst:121 msgid "" "The :class:`pstats.Stats` class reads profile results from a file and " "formats them in various ways." msgstr "" #: library/profile.rst:124 msgid "" "The files :mod:`cProfile` and :mod:`profile` can also be invoked as a script " "to profile another script. For example::" msgstr "" #: library/profile.rst:129 msgid "``-o`` writes the profile results to a file instead of to stdout" msgstr "" #: library/profile.rst:131 msgid "" "``-s`` specifies one of the :func:`~pstats.Stats.sort_stats` sort values to " "sort the output by. This only applies when ``-o`` is not supplied." msgstr "" #: library/profile.rst:134 msgid "``-m`` specifies that a module is being profiled instead of a script." msgstr "" #: library/profile.rst:136 msgid "Added the ``-m`` option to :mod:`cProfile`." msgstr "" #: library/profile.rst:139 msgid "Added the ``-m`` option to :mod:`profile`." msgstr "" #: library/profile.rst:142 msgid "" "The :mod:`pstats` module's :class:`~pstats.Stats` class has a variety of " "methods for manipulating and printing the data saved into a profile results " "file::" msgstr "" #: library/profile.rst:150 msgid "" "The :meth:`~pstats.Stats.strip_dirs` method removed the extraneous path from " "all the module names. The :meth:`~pstats.Stats.sort_stats` method sorted all " "the entries according to the standard module/line/name string that is " "printed. The :meth:`~pstats.Stats.print_stats` method printed out all the " "statistics. You might try the following sort calls::" msgstr "" #: library/profile.rst:159 msgid "" "The first call will actually sort the list by function name, and the second " "call will print out the statistics. The following are some interesting " "calls to experiment with::" msgstr "" #: library/profile.rst:165 msgid "" "This sorts the profile by cumulative time in a function, and then only " "prints the ten most significant lines. If you want to understand what " "algorithms are taking time, the above line is what you would use." msgstr "" #: library/profile.rst:169 msgid "" "If you were looking to see what functions were looping a lot, and taking a " "lot of time, you would do::" msgstr "" #: library/profile.rst:174 msgid "" "to sort according to time spent within each function, and then print the " "statistics for the top ten functions." msgstr "" #: library/profile.rst:177 msgid "You might also try::" msgstr "" #: library/profile.rst:181 msgid "" "This will sort all the statistics by file name, and then print out " "statistics for only the class init methods (since they are spelled with " "``__init__`` in them). As one final example, you could try::" msgstr "" #: library/profile.rst:187 msgid "" "This line sorts statistics with a primary key of time, and a secondary key " "of cumulative time, and then prints out some of the statistics. To be " "specific, the list is first culled down to 50% (re: ``.5``) of its original " "size, then only lines containing ``init`` are maintained, and that sub-sub-" "list is printed." msgstr "" #: library/profile.rst:192 msgid "" "If you wondered what functions called the above functions, you could now " "(``p`` is still sorted according to the last criteria) do::" msgstr "" #: library/profile.rst:197 msgid "and you would get a list of callers for each of the listed functions." msgstr "" #: library/profile.rst:199 msgid "" "If you want more functionality, you're going to have to read the manual, or " "guess what the following functions do::" msgstr "" #: library/profile.rst:205 msgid "" "Invoked as a script, the :mod:`pstats` module is a statistics browser for " "reading and examining profile dumps. It has a simple line-oriented " "interface (implemented using :mod:`cmd`) and interactive help." msgstr "" #: library/profile.rst:210 msgid ":mod:`profile` and :mod:`cProfile` Module Reference" msgstr "" #: library/profile.rst:216 msgid "" "Both the :mod:`profile` and :mod:`cProfile` modules provide the following " "functions:" msgstr "" #: library/profile.rst:221 msgid "" "This function takes a single argument that can be passed to the :func:`exec` " "function, and an optional file name. In all cases this routine executes::" msgstr "" #: library/profile.rst:226 msgid "" "and gathers profiling statistics from the execution. If no file name is " "present, then this function automatically creates a :class:`~pstats.Stats` " "instance and prints a simple profiling report. If the sort value is " "specified, it is passed to this :class:`~pstats.Stats` instance to control " "how the results are sorted." msgstr "" #: library/profile.rst:234 msgid "" "This function is similar to :func:`run`, with added arguments to supply the " "globals and locals dictionaries for the *command* string. This routine " "executes::" msgstr "" #: library/profile.rst:240 msgid "and gathers profiling statistics as in the :func:`run` function above." msgstr "" #: library/profile.rst:244 msgid "" "This class is normally only used if more precise control over profiling is " "needed than what the :func:`cProfile.run` function provides." msgstr "" #: library/profile.rst:247 msgid "" "A custom timer can be supplied for measuring how long code takes to run via " "the *timer* argument. This must be a function that returns a single number " "representing the current time. If the number is an integer, the *timeunit* " "specifies a multiplier that specifies the duration of each unit of time. For " "example, if the timer returns times measured in thousands of seconds, the " "time unit would be ``.001``." msgstr "" #: library/profile.rst:254 msgid "" "Directly using the :class:`Profile` class allows formatting profile results " "without writing the profile data to a file::" msgstr "" #: library/profile.rst:269 msgid "" "The :class:`Profile` class can also be used as a context manager (supported " "only in :mod:`cProfile` module. see :ref:`typecontextmanager`)::" msgstr "" #: library/profile.rst:279 msgid "Added context manager support." msgstr "Ajout de la gestion des gestionnaires de contexte." #: library/profile.rst:284 msgid "Start collecting profiling data. Only in :mod:`cProfile`." msgstr "" #: library/profile.rst:288 msgid "Stop collecting profiling data. Only in :mod:`cProfile`." msgstr "" #: library/profile.rst:292 msgid "" "Stop collecting profiling data and record the results internally as the " "current profile." msgstr "" #: library/profile.rst:297 msgid "" "Create a :class:`~pstats.Stats` object based on the current profile and " "print the results to stdout." msgstr "" #: library/profile.rst:302 msgid "Write the results of the current profile to *filename*." msgstr "" #: library/profile.rst:306 msgid "Profile the cmd via :func:`exec`." msgstr "" #: library/profile.rst:310 msgid "" "Profile the cmd via :func:`exec` with the specified global and local " "environment." msgstr "" #: library/profile.rst:315 msgid "Profile ``func(*args, **kwargs)``" msgstr "" #: library/profile.rst:317 msgid "" "Note that profiling will only work if the called command/function actually " "returns. If the interpreter is terminated (e.g. via a :func:`sys.exit` call " "during the called command/function execution) no profiling results will be " "printed." msgstr "" #: library/profile.rst:325 msgid "The :class:`Stats` Class" msgstr "" #: library/profile.rst:327 msgid "" "Analysis of the profiler data is done using the :class:`~pstats.Stats` class." msgstr "" #: library/profile.rst:334 msgid "" "This class constructor creates an instance of a \"statistics object\" from a " "*filename* (or list of filenames) or from a :class:`Profile` instance. " "Output will be printed to the stream specified by *stream*." msgstr "" #: library/profile.rst:338 msgid "" "The file selected by the above constructor must have been created by the " "corresponding version of :mod:`profile` or :mod:`cProfile`. To be specific, " "there is *no* file compatibility guaranteed with future versions of this " "profiler, and there is no compatibility with files produced by other " "profilers, or the same profiler run on a different operating system. If " "several files are provided, all the statistics for identical functions will " "be coalesced, so that an overall view of several processes can be considered " "in a single report. If additional files need to be combined with data in an " "existing :class:`~pstats.Stats` object, the :meth:`~pstats.Stats.add` method " "can be used." msgstr "" #: library/profile.rst:349 msgid "" "Instead of reading the profile data from a file, a :class:`cProfile.Profile` " "or :class:`profile.Profile` object can be used as the profile data source." msgstr "" #: library/profile.rst:352 msgid ":class:`Stats` objects have the following methods:" msgstr "" #: library/profile.rst:356 msgid "" "This method for the :class:`Stats` class removes all leading path " "information from file names. It is very useful in reducing the size of the " "printout to fit within (close to) 80 columns. This method modifies the " "object, and the stripped information is lost. After performing a strip " "operation, the object is considered to have its entries in a \"random\" " "order, as it was just after object initialization and loading. If :meth:" "`~pstats.Stats.strip_dirs` causes two function names to be indistinguishable " "(they are on the same line of the same filename, and have the same function " "name), then the statistics for these two entries are accumulated into a " "single entry." msgstr "" #: library/profile.rst:370 msgid "" "This method of the :class:`Stats` class accumulates additional profiling " "information into the current profiling object. Its arguments should refer " "to filenames created by the corresponding version of :func:`profile.run` or :" "func:`cProfile.run`. Statistics for identically named (re: file, line, name) " "functions are automatically accumulated into single function statistics." msgstr "" #: library/profile.rst:380 msgid "" "Save the data loaded into the :class:`Stats` object to a file named " "*filename*. The file is created if it does not exist, and is overwritten if " "it already exists. This is equivalent to the method of the same name on " "the :class:`profile.Profile` and :class:`cProfile.Profile` classes." msgstr "" #: library/profile.rst:388 msgid "" "This method modifies the :class:`Stats` object by sorting it according to " "the supplied criteria. The argument can be either a string or a SortKey " "enum identifying the basis of a sort (example: ``'time'``, ``'name'``, " "``SortKey.TIME`` or ``SortKey.NAME``). The SortKey enums argument have " "advantage over the string argument in that it is more robust and less error " "prone." msgstr "" #: library/profile.rst:395 msgid "" "When more than one key is provided, then additional keys are used as " "secondary criteria when there is equality in all keys selected before them. " "For example, ``sort_stats(SortKey.NAME, SortKey.FILE)`` will sort all the " "entries according to their function name, and resolve all ties (identical " "function names) by sorting by file name." msgstr "" #: library/profile.rst:401 msgid "" "For the string argument, abbreviations can be used for any key names, as " "long as the abbreviation is unambiguous." msgstr "" #: library/profile.rst:404 msgid "The following are the valid string and SortKey:" msgstr "" #: library/profile.rst:407 msgid "Valid String Arg" msgstr "" #: library/profile.rst:407 msgid "Valid enum Arg" msgstr "" #: library/profile.rst:407 msgid "Meaning" msgstr "Signification" #: library/profile.rst:409 msgid "``'calls'``" msgstr "``'calls'``" #: library/profile.rst:409 msgid "SortKey.CALLS" msgstr "" #: library/profile.rst:421 msgid "call count" msgstr "" #: library/profile.rst:411 msgid "``'cumulative'``" msgstr "``'cumulative'``" #: library/profile.rst:411 msgid "SortKey.CUMULATIVE" msgstr "" #: library/profile.rst:413 msgid "cumulative time" msgstr "" #: library/profile.rst:413 msgid "``'cumtime'``" msgstr "``'cumtime'``" #: library/profile.rst:415 library/profile.rst:421 library/profile.rst:435 msgid "N/A" msgstr "N/A" #: library/profile.rst:415 msgid "``'file'``" msgstr "``'file'``" #: library/profile.rst:417 library/profile.rst:419 msgid "file name" msgstr "" #: library/profile.rst:417 msgid "``'filename'``" msgstr "``'filename'``" #: library/profile.rst:417 msgid "SortKey.FILENAME" msgstr "" #: library/profile.rst:419 msgid "``'module'``" msgstr "``'module'``" #: library/profile.rst:421 msgid "``'ncalls'``" msgstr "``'ncalls'``" #: library/profile.rst:423 msgid "``'pcalls'``" msgstr "``'pcalls'``" #: library/profile.rst:423 msgid "SortKey.PCALLS" msgstr "" #: library/profile.rst:423 msgid "primitive call count" msgstr "" #: library/profile.rst:425 msgid "``'line'``" msgstr "``'line'``" #: library/profile.rst:425 msgid "SortKey.LINE" msgstr "" #: library/profile.rst:425 msgid "line number" msgstr "" #: library/profile.rst:427 msgid "``'name'``" msgstr "``'name'``" #: library/profile.rst:427 msgid "SortKey.NAME" msgstr "" #: library/profile.rst:427 msgid "function name" msgstr "" #: library/profile.rst:429 msgid "``'nfl'``" msgstr "``'nfl'``" #: library/profile.rst:429 msgid "SortKey.NFL" msgstr "" #: library/profile.rst:429 msgid "name/file/line" msgstr "" #: library/profile.rst:431 msgid "``'stdname'``" msgstr "``'stdname'``" #: library/profile.rst:431 msgid "SortKey.STDNAME" msgstr "" #: library/profile.rst:431 msgid "standard name" msgstr "" #: library/profile.rst:433 msgid "``'time'``" msgstr "``'time'``" #: library/profile.rst:433 msgid "SortKey.TIME" msgstr "" #: library/profile.rst:435 msgid "internal time" msgstr "" #: library/profile.rst:435 msgid "``'tottime'``" msgstr "``'tottime'``" #: library/profile.rst:438 msgid "" "Note that all sorts on statistics are in descending order (placing most time " "consuming items first), where as name, file, and line number searches are in " "ascending order (alphabetical). The subtle distinction between ``SortKey." "NFL`` and ``SortKey.STDNAME`` is that the standard name is a sort of the " "name as printed, which means that the embedded line numbers get compared in " "an odd way. For example, lines 3, 20, and 40 would (if the file names were " "the same) appear in the string order 20, 3 and 40. In contrast, ``SortKey." "NFL`` does a numeric compare of the line numbers. In fact, " "``sort_stats(SortKey.NFL)`` is the same as ``sort_stats(SortKey.NAME, " "SortKey.FILENAME, SortKey.LINE)``." msgstr "" #: library/profile.rst:449 msgid "" "For backward-compatibility reasons, the numeric arguments ``-1``, ``0``, " "``1``, and ``2`` are permitted. They are interpreted as ``'stdname'``, " "``'calls'``, ``'time'``, and ``'cumulative'`` respectively. If this old " "style format (numeric) is used, only one sort key (the numeric key) will be " "used, and additional arguments will be silently ignored." msgstr "" #: library/profile.rst:457 msgid "Added the SortKey enum." msgstr "" #: library/profile.rst:462 msgid "" "This method for the :class:`Stats` class reverses the ordering of the basic " "list within the object. Note that by default ascending vs descending order " "is properly selected based on the sort key of choice." msgstr "" #: library/profile.rst:472 msgid "" "This method for the :class:`Stats` class prints out a report as described in " "the :func:`profile.run` definition." msgstr "" #: library/profile.rst:475 msgid "" "The order of the printing is based on the last :meth:`~pstats.Stats." "sort_stats` operation done on the object (subject to caveats in :meth:" "`~pstats.Stats.add` and :meth:`~pstats.Stats.strip_dirs`)." msgstr "" #: library/profile.rst:480 msgid "" "The arguments provided (if any) can be used to limit the list down to the " "significant entries. Initially, the list is taken to be the complete set of " "profiled functions. Each restriction is either an integer (to select a " "count of lines), or a decimal fraction between 0.0 and 1.0 inclusive (to " "select a percentage of lines), or a string that will interpreted as a " "regular expression (to pattern match the standard name that is printed). If " "several restrictions are provided, then they are applied sequentially. For " "example::" msgstr "" #: library/profile.rst:491 msgid "" "would first limit the printing to first 10% of list, and then only print " "functions that were part of filename :file:`.\\*foo:`. In contrast, the " "command::" msgstr "" #: library/profile.rst:497 msgid "" "would limit the list to all functions having file names :file:`.\\*foo:`, " "and then proceed to only print the first 10% of them." msgstr "" #: library/profile.rst:503 msgid "" "This method for the :class:`Stats` class prints a list of all functions that " "called each function in the profiled database. The ordering is identical to " "that provided by :meth:`~pstats.Stats.print_stats`, and the definition of " "the restricting argument is also identical. Each caller is reported on its " "own line. The format differs slightly depending on the profiler that " "produced the stats:" msgstr "" #: library/profile.rst:510 msgid "" "With :mod:`profile`, a number is shown in parentheses after each caller to " "show how many times this specific call was made. For convenience, a second " "non-parenthesized number repeats the cumulative time spent in the function " "at the right." msgstr "" #: library/profile.rst:515 msgid "" "With :mod:`cProfile`, each caller is preceded by three numbers: the number " "of times this specific call was made, and the total and cumulative times " "spent in the current function while it was invoked by this specific caller." msgstr "" #: library/profile.rst:523 msgid "" "This method for the :class:`Stats` class prints a list of all function that " "were called by the indicated function. Aside from this reversal of " "direction of calls (re: called vs was called by), the arguments and ordering " "are identical to the :meth:`~pstats.Stats.print_callers` method." msgstr "" #: library/profile.rst:531 msgid "" "This method returns an instance of StatsProfile, which contains a mapping of " "function names to instances of FunctionProfile. Each FunctionProfile " "instance holds information related to the function's profile such as how " "long the function took to run, how many times it was called, etc..." msgstr "" #: library/profile.rst:536 msgid "" "Added the following dataclasses: StatsProfile, FunctionProfile. Added the " "following function: get_stats_profile." msgstr "" #: library/profile.rst:543 msgid "What Is Deterministic Profiling?" msgstr "" #: library/profile.rst:545 msgid "" ":dfn:`Deterministic profiling` is meant to reflect the fact that all " "*function call*, *function return*, and *exception* events are monitored, " "and precise timings are made for the intervals between these events (during " "which time the user's code is executing). In contrast, :dfn:`statistical " "profiling` (which is not done by this module) randomly samples the effective " "instruction pointer, and deduces where time is being spent. The latter " "technique traditionally involves less overhead (as the code does not need to " "be instrumented), but provides only relative indications of where time is " "being spent." msgstr "" #: library/profile.rst:554 msgid "" "In Python, since there is an interpreter active during execution, the " "presence of instrumented code is not required in order to do deterministic " "profiling. Python automatically provides a :dfn:`hook` (optional callback) " "for each event. In addition, the interpreted nature of Python tends to add " "so much overhead to execution, that deterministic profiling tends to only " "add small processing overhead in typical applications. The result is that " "deterministic profiling is not that expensive, yet provides extensive run " "time statistics about the execution of a Python program." msgstr "" #: library/profile.rst:563 msgid "" "Call count statistics can be used to identify bugs in code (surprising " "counts), and to identify possible inline-expansion points (high call " "counts). Internal time statistics can be used to identify \"hot loops\" " "that should be carefully optimized. Cumulative time statistics should be " "used to identify high level errors in the selection of algorithms. Note " "that the unusual handling of cumulative times in this profiler allows " "statistics for recursive implementations of algorithms to be directly " "compared to iterative implementations." msgstr "" #: library/profile.rst:576 msgid "Limitations" msgstr "" #: library/profile.rst:578 msgid "" "One limitation has to do with accuracy of timing information. There is a " "fundamental problem with deterministic profilers involving accuracy. The " "most obvious restriction is that the underlying \"clock\" is only ticking at " "a rate (typically) of about .001 seconds. Hence no measurements will be " "more accurate than the underlying clock. If enough measurements are taken, " "then the \"error\" will tend to average out. Unfortunately, removing this " "first error induces a second source of error." msgstr "" #: library/profile.rst:586 msgid "" "The second problem is that it \"takes a while\" from when an event is " "dispatched until the profiler's call to get the time actually *gets* the " "state of the clock. Similarly, there is a certain lag when exiting the " "profiler event handler from the time that the clock's value was obtained " "(and then squirreled away), until the user's code is once again executing. " "As a result, functions that are called many times, or call many functions, " "will typically accumulate this error. The error that accumulates in this " "fashion is typically less than the accuracy of the clock (less than one " "clock tick), but it *can* accumulate and become very significant." msgstr "" #: library/profile.rst:596 msgid "" "The problem is more important with :mod:`profile` than with the lower-" "overhead :mod:`cProfile`. For this reason, :mod:`profile` provides a means " "of calibrating itself for a given platform so that this error can be " "probabilistically (on the average) removed. After the profiler is " "calibrated, it will be more accurate (in a least square sense), but it will " "sometimes produce negative numbers (when call counts are exceptionally low, " "and the gods of probability work against you :-). ) Do *not* be alarmed by " "negative numbers in the profile. They should *only* appear if you have " "calibrated your profiler, and the results are actually better than without " "calibration." msgstr "" #: library/profile.rst:610 msgid "Calibration" msgstr "" #: library/profile.rst:612 msgid "" "The profiler of the :mod:`profile` module subtracts a constant from each " "event handling time to compensate for the overhead of calling the time " "function, and socking away the results. By default, the constant is 0. The " "following procedure can be used to obtain a better constant for a given " "platform (see :ref:`profile-limitations`). ::" msgstr "" #: library/profile.rst:623 msgid "" "The method executes the number of Python calls given by the argument, " "directly and again under the profiler, measuring the time for both. It then " "computes the hidden overhead per profiler event, and returns that as a " "float. For example, on a 1.8Ghz Intel Core i5 running macOS, and using " "Python's time.process_time() as the timer, the magical number is about " "4.04e-6." msgstr "" #: library/profile.rst:629 msgid "" "The object of this exercise is to get a fairly consistent result. If your " "computer is *very* fast, or your timer function has poor resolution, you " "might have to pass 100000, or even 1000000, to get consistent results." msgstr "" #: library/profile.rst:633 msgid "" "When you have a consistent answer, there are three ways you can use it::" msgstr "" #: library/profile.rst:647 msgid "" "If you have a choice, you are better off choosing a smaller constant, and " "then your results will \"less often\" show up as negative in profile " "statistics." msgstr "" #: library/profile.rst:653 msgid "Using a custom timer" msgstr "" #: library/profile.rst:655 msgid "" "If you want to change how current time is determined (for example, to force " "use of wall-clock time or elapsed process time), pass the timing function " "you want to the :class:`Profile` class constructor::" msgstr "" #: library/profile.rst:661 msgid "" "The resulting profiler will then call ``your_time_func``. Depending on " "whether you are using :class:`profile.Profile` or :class:`cProfile.Profile`, " "``your_time_func``'s return value will be interpreted differently:" msgstr "" #: library/profile.rst:679 msgid ":class:`profile.Profile`" msgstr ":class:`profile.Profile`" #: library/profile.rst:666 msgid "" "``your_time_func`` should return a single number, or a list of numbers whose " "sum is the current time (like what :func:`os.times` returns). If the " "function returns a single time number, or the list of returned numbers has " "length 2, then you will get an especially fast version of the dispatch " "routine." msgstr "" #: library/profile.rst:672 msgid "" "Be warned that you should calibrate the profiler class for the timer " "function that you choose (see :ref:`profile-calibration`). For most " "machines, a timer that returns a lone integer value will provide the best " "results in terms of low overhead during profiling. (:func:`os.times` is " "*pretty* bad, as it returns a tuple of floating point values). If you want " "to substitute a better timer in the cleanest fashion, derive a class and " "hardwire a replacement dispatch method that best handles your timer call, " "along with the appropriate calibration constant." msgstr "" #: library/profile.rst:693 msgid ":class:`cProfile.Profile`" msgstr ":class:`cProfile.Profile`" #: library/profile.rst:682 msgid "" "``your_time_func`` should return a single number. If it returns integers, " "you can also invoke the class constructor with a second argument specifying " "the real duration of one unit of time. For example, if " "``your_integer_time_func`` returns times measured in thousands of seconds, " "you would construct the :class:`Profile` instance as follows::" msgstr "" #: library/profile.rst:690 msgid "" "As the :class:`cProfile.Profile` class cannot be calibrated, custom timer " "functions should be used with care and should be as fast as possible. For " "the best results with a custom timer, it might be necessary to hard-code it " "in the C source of the internal :mod:`_lsprof` module." msgstr "" #: library/profile.rst:695 msgid "" "Python 3.3 adds several new functions in :mod:`time` that can be used to " "make precise measurements of process or wall-clock time. For example, see :" "func:`time.perf_counter`." msgstr ""