سؤال

لم أكن قادرًا على العثور على هذا في أي مكان عبر الإنترنت. كنت أتطلع إلى اكتشاف استخدام البروفيلر كيفية تحسين الكود الخاص بي بشكل أفضل ، وعندما يتم فرز الوظائف التي تستخدم بها معظم الوقت بشكل تراكمي ، وأشياء مثل STR () ، والطباعة ، وغيرها من الوظائف المتشابهة على نطاق واسع تتناول الكثير من الملف الشخصي. ما هي أفضل طريقة لبرنامج Python للحصول على وظائف محددة من قبل المستخدم فقط لمعرفة مجالات الكود التي يمكنهم تحسينها؟

آمل أن يكون هذا منطقيًا ، أي ضوء يمكنك إلقاؤه على هذا الموضوع سيكون موضع تقدير كبير.

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

المحلول

حسنًا ، أفترض حقا الهدف هو جعل الكود الخاص بك بأسرع ما يمكن بشكل معقول ، أليس كذلك؟

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

ضع في اعتبارك أن برنامجك يعمل على تتبع شجرة مكالمات ، والتي تشبه الشجرة الحقيقية خارج نافذتك. الجذع مثل main الوظيفة ، وحيث ينقسم أي فرع منه مثل استدعاء وظيفة أخرى.

لنفترض أن كل "ورقة" يستغرق وقتًا معينًا ، وما تريد فعله هو تقليم الشجرة لإزالة أكبر عدد ممكن من الأوراق.

طريقة واحدة هي العثور على فروع بها الكثير من الأوراق وقطع الأوراق. هناك طريقة أخرى هي قطع الفروع بأكملها إذا لم تكن بحاجة إليها. المشكلة هي العثور على فروع ثقيلة لا تحتاجها.

تتمثل إحدى الطرق البسيطة في العظام للقيام بذلك في اختيار عدة أوراق عشوائية ، مثل 10 ، وعلى كل واحدة ، تتبع خطًا أسفل فرعه طوال الطريق إلى الجذع. سيكون لدى أي نقطة فرع عدد من هذه الخطوط التي تمر عبرها ، من الأوراق إلى الجذع. كلما زاد عدد الخطوط عبر تلك النقطة الفرعية ، كلما زادت الأوراق على هذا الفرع ، وكلما زاد عدد الأوراق التي يمكنك حفظها عن طريق تقليمها.

إليك كيفية تطبيق هذا على برنامجك. لأخذ عينات من ورقة ، يمكنك إيقاف البرنامج بشكل عشوائي وإلقاء نظرة على مكدس المكالمات. هذا هو الخط مرة أخرى إلى الجذع. كل موقع الاتصال على ذلك (وليس الوظيفة ، موقع الاتصال) هو نقطة فرع. إذا كان موقع الاتصال هذا على جزء صغير من العينات ، مثل 40 ٪ ، فهذا هو المبلغ الذي يمكنك حفظه من خلال تقليمه.

لذلك ، لا تفكر في الأمر على أنه يقيس المدة التي تستغرقها الوظائف. فكر في الأمر على أنه السؤال عن مواقع المكالمات "ثقيلة". هذا كل ما في الامر.

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