Question

Désolé pour la question de débutant, mais je ne peux pas comprendre cprofile (je suis vraiment nouveau à Python)

Je peux exécuter via mon terminal avec:

python -m cProfile myscript.py

Mais je dois l'exécuter sur un serveur web, donc je voudrais mettre la commande dans le script, il regardera. Comment puis-je faire cela? Je l'ai vu des choses en utilisant des termes comme __init__ and __main__ mais je ne comprends pas vraiment ce que ceux-ci sont.

Je sais que c'est simple, je suis juste essayer encore apprendre tout et je sais qu'il ya quelqu'un qui va le savoir.

Merci d'avance! Je l'apprécie.

Était-ce utile?

La solution

Je pense que vous avez été voir des idées comme celle-ci:

if __name__ == "__main__":
    # do something if this script is invoked
    # as python scriptname. Otherwise, gets ignored.

Qu'est-ce qui se passe est quand vous appelez python sur un script, ce fichier a un ensemble de __name__ d'attribut à "__main__" si elle est le fichier étant directement appelé par l'exécutable python. Dans le cas contraire, (si elle n'est pas appelé directement) est importé.

Maintenant, vous pouvez utiliser cette astuce sur vos scripts si vous avez besoin, par exemple, en supposant que:

def somescriptfunc():
    # does something
    pass


if __name__ == "__main__":
    # do something if this script is invoked
    # as python scriptname. Otherwise, gets ignored.

    import cProfile
    cProfile.run('somescriptfunc()')

Cela change votre script. Lors de l'importation, ses fonctions membres, des classes, etc. peuvent être utilisés normalement. Lorsque run de la ligne de commande, se profile.

Est-ce que vous cherchez?


D'après les commentaires que j'ai rassemblé plus est peut-être nécessaire, il faut en tenir:

Si vous utilisez un script de changements de CGI sont, il est de la forme:

# do some stuff to extract the parameters
# do something with the parameters
# return the response.

Quand je dis en résumé, vous pouvez faire ceci:

def do_something_with_parameters(param1, param2):
    pass

if __name__ = "__main__":
    import cProfile
    cProfile.run('do_something_with_parameters(param1=\'sometestvalue\')')

Placez ce fichier sur votre chemin de python. Quand exécuter lui-même, il le profil de la fonction que vous souhaitez profiler.

Maintenant, pour votre script CGI, créer un script qui fait:

import {insert name of script from above here}

# do something to determine parameter values
# do something with them *via the function*:
do_something_with_parameters(param1=..., param2=...)
# return something

Ainsi, votre script cgi devient juste un peu wrapper pour votre fonction (ce qui est de toute façon) et votre fonction est maintenant auto-test.

Vous pouvez ensuite le profil de la fonction à l'aide des valeurs faites sur votre bureau, loin du serveur de production.

Il y a probablement plus propre moyens d'y parvenir, mais il travaillerait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top