Tôi đã tìm thấy Gprof2Dot cực kỳ hữu ích. Đầu ra của các mô-đun lược tả mà tôi đã cố gắng giải thích khá rõ ràng.
Gprof2Dot biến đầu ra cProfile thành biểu đồ đẹp, với chuỗi chậm nhất (?) Được đánh dấu và một chút thông tin về từng chức năng (tên hàm, phần trăm thời gian sử dụng chức năng này và số lượng cuộc gọi).
An example graph (1429x1896px)
Tôi đã không được thực hiện nhiều với App Engine, nhưng khi profiling kịch bản phi webapp, tôi có xu hướng để cấu hình kịch bản chạy tất cả các unittests, mà có thể không được rất chính xác để thực thế giới các tình huống
Phương pháp Một (tốt hơn?) sẽ có tập lệnh thực hiện yêu cầu WSGI giả, sau đó gửi tiểu sử đó.
WSGI thực sự là giao thức đơn giản, về cơ bản là một hàm lấy hai đối số, một với thông tin yêu cầu và hàm thứ hai có hàm gọi lại (được sử dụng để đặt tiêu đề, trong số các thứ khác). Có lẽ một cái gì đó như sau (mà có thể làm việc mã giả) ...
class IndexHandler(webapp.RequestHandler):
"""Your site"""
def get(self):
self.response.out.write("hi")
if __name__ == '__main__':
application = webapp.WSGIApplication([
('.*', IndexHandler),
], debug=True)
# Start fake-request/profiling bit
urls = [
"/",
"/blog/view/hello",
"/admin/post/edit/hello",
"/makeanerror404",
"/makeanerror500"
]
def fake_wsgi_callback(response, headers):
"""Prints heads to stdout"""
print("\n".join(["%s: %s" % (n, v) for n, v in headers]))
print("\n")
for request_url in urls:
html = application({
'REQUEST_METHOD': 'GET',
'PATH_INFO': request_url},
fake_wsgi_callback
)
print html
Trên thực tế, các tài liệu App Engine giải thích một cách tốt hơn profiling ứng dụng của bạn:
Từ http://code.google.com/appengine/kb/commontasks.html#profiling:
Để cấu hình hiệu suất của ứng dụng, trước tiên hãy đổi tên chức năng main()
của ứng dụng thành real_main()
. Sau đó, thêm một chức năng chính mới để ứng dụng của bạn, tên profile_main()
như hình dưới đây:
def profile_main():
# This is the main function for profiling
# We've renamed our original main() above to real_main()
import cProfile, pstats
prof = cProfile.Profile()
prof = prof.runctx("real_main()", globals(), locals())
print "<pre>"
stats = pstats.Stats(prof)
stats.sort_stats("time") # Or cumulative
stats.print_stats(80) # 80 = how many to print
# The rest is optional.
# stats.print_callees()
# stats.print_callers()
print "</pre>"
[...]
Để kích hoạt profiling với ứng dụng của bạn, thiết lập main = profile_main
. Để chạy ứng dụng của bạn như bình thường, chỉ cần đặt main = real_main
.
Cập nhật: điều này bây giờ là một phần của GAE SDK: http://googleappengine.blogspot.com/2010/02/app-engine-sdk-131-including-major.html http: // đang .google.com/appengine/docs/python/tools/appstats.html – Turadg