لا يمكن معرفة كيفية استدعاء cprofile داخل البرنامج
سؤال
آسف على سؤال المبتدئين ، لكن لا يمكنني معرفة 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 الخاص بك مجرد غلاف صغير لوظيفتك (وهي على أي حال) والوظيفة الخاصة بك الآن اختبار ذاتي.
يمكنك بعد ذلك ملف تعريف الوظيفة باستخدام قيم مكوّنة على سطح المكتب ، بعيدًا عن خادم الإنتاج.
من المحتمل أن تكون هناك طرق رائعة لتحقيق ذلك ، لكنها ستعمل.