আমি আমার কোড প্রোফাইলে সিপ্রোফিল ব্যবহার করছি এবং এটি দুর্দান্ত কাজ করছে। আমিও ব্যবহার করি ফলাফলগুলি কল্পনা gprof2dot.py করি (এটিকে কিছুটা আরও পরিষ্কার করে তোলে)।
যাইহোক, সিপ্রোফাইল (এবং এখনও অবধি আমি দেখা অন্যান্য পাইথন প্রোফাইলাররা) কেবলমাত্র ফাংশন-কল স্তরে প্রোফাইল বলে মনে হচ্ছে। যখন বিভিন্ন জায়গা থেকে নির্দিষ্ট ফাংশনগুলি কল করা হয় তখন এটি বিভ্রান্তির সৃষ্টি করে - আমার কল্পনা নেই যে # 1 কল করুন বা কল করুন 2 2 যদি বেশিরভাগ সময় গ্রহণ করে। এটি আরও খারাপ হয়ে যায় যখন প্রশ্নে ফাংশনটি ছয় স্তর গভীর হয়, অন্য সাতটি স্থান থেকে ডাকা হয়।
আমি কীভাবে একটি লাইন বাই লাইন প্রোফাইলিং করব?
এর পরিবর্তে:
function #12, total time: 2.0s
আমি এরকম কিছু দেখতে চাই:
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
সিফ্রোফাইল পিতামাতার কাছে মোট সময় "স্থানান্তর" করার পরিমাণটি দেখায়, তবে আপনার কাছে একগুচ্ছ স্তর এবং আন্তঃসংযুক্ত কল থাকার পরে এই সংযোগটি হারিয়ে যায়।
আদর্শভাবে, আমি একটি জিইউআই রাখতে চাই যা ডেটাটি বিশ্লেষণ করে, তারপরে আমাকে প্রতিটি লাইনে মোট সময় দিয়ে আমার উত্স ফাইলটি দেখায়। এটার মতো কিছু:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
তারপরে আমি "ফানক (এ)" কল থেকে পৃথক হয়ে সেই কলটিতে কী সময় নিচ্ছে তা দেখার জন্য আমি দ্বিতীয় "ফানক (সি)" কলটিতে ক্লিক করতে সক্ষম হব।
যে জানার জন্য? এমন কোন প্রোফাইল লাইব্রেরি আছে যা এই ধরণের তথ্য সংগ্রহ করে? আমি মিস করেছি এমন কি দুর্দান্ত কিছু সরঞ্জাম আছে?
pstats.print_callers
। একটি উদাহরণ এখানে ।