لا يمكن معرفة كيفية استدعاء cprofile داخل البرنامج

StackOverflow https://stackoverflow.com/questions/3489769

سؤال

آسف على سؤال المبتدئين ، لكن لا يمكنني معرفة cprofile (أنا جديد حقًا على Python)

يمكنني تشغيله عبر المحطة الخاصة بي مع:

python -m cProfile myscript.py

لكنني بحاجة إلى تشغيله على خادم ويب ، لذلك أود وضع الأمر داخل البرنامج النصي الذي سيبحث عنه. كيف يمكنني ان افعل هذا؟ لقد رأيت أشياء تستخدم مصطلحات مثل __init__ and __main__ لكني لا أفهم حقًا ما هي عليه.

أعلم أن هذا بسيط ، ما زلت أحاول تعلم كل شيء وأعلم أن هناك شخصًا يعرف ذلك.

شكرا مقدما! أنا أقدر ذلك.

هل كانت مفيدة؟

المحلول

أعتقد أنك رأيت أفكارًا مثل هذا:

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

ما يحدث هو عندما تتصل بيثون على البرنامج النصي ، يحتوي هذا الملف على سمة __name__ ضبط ل "__main__" إذا كان الملف يتم استدعاؤه مباشرة من قبل Python القابلة للتنفيذ. خلاف ذلك ، (إذا لم يطلق عليه مباشرة) يتم استيراده.

الآن ، يمكنك استخدام هذه الخدعة على البرامج النصية الخاصة بك إذا كنت بحاجة ، على سبيل المثال ، على افتراض أن لديك:

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()')

هذا يغير البرنامج النصي الخاص بك. عند الاستيراد ، يمكن استخدام وظائف الأعضاء ، والطبقات ، إلخ. متي يجري من سطر الأوامر ، فإنه يلفت الانتباه نفسه.

هل هذا ما تبحث عنه؟


من التعليقات التي جمعتها أكثر ، ربما تكون هناك حاجة إليها ، لذلك هنا:

إذا كنت تقوم بتشغيل برنامج نصي من تغييرات CGI ، فهل هو من النموذج:

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

عندما أقول مجردة ، يمكنك القيام بذلك:

def do_something_with_parameters(param1, param2):
    pass

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

ضع هذا الملف على مسار Python الخاص بك. عند تشغيل نفسه ، ستعمل على الملف الشخصي الذي تريد التنميط.

الآن ، لنص CGI الخاص بك ، قم بإنشاء برنامج نصي يقوم به:

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

لذا ، يصبح البرنامج النصي CGI الخاص بك مجرد غلاف صغير لوظيفتك (وهي على أي حال) والوظيفة الخاصة بك الآن اختبار ذاتي.

يمكنك بعد ذلك ملف تعريف الوظيفة باستخدام قيم مكوّنة على سطح المكتب ، بعيدًا عن خادم الإنتاج.

من المحتمل أن تكون هناك طرق رائعة لتحقيق ذلك ، لكنها ستعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top