2015-10-03 21 views
6

Tôi đang chạy một chương trình python tương đối phức tạp và trong đó có một mô phỏng montecarlo chiếm phần lớn thời gian. Tôi muốn tìm hiểu phần nào của nó sử dụng nhiều tài nguyên nhất để tôi có thể làm cho nó nhanh hơn.Lập một chương trình python với PyCharm (hoặc bất kỳ IDE nào khác)

Tôi đang sử dụng phiên bản PyCharm Professional và cố gắng sử dụng profiler, nhưng kết quả chỉ là một danh sách lớn các chức năng không liên quan mà tôi chưa bao giờ nghe nói đến.

Câu hỏi: Tôi có thể sử dụng profiler tốt để mang lại kết quả có ý nghĩa để tôi có thể xem chức năng hoặc từ khóa nào sử dụng nhiều tài nguyên nhất trong mô phỏng montecarlo của tôi?

+1

Đừng đi quá lâu mà không thử [* this *] (http://stackoverflow.com/a/4299378/23771). Nó chi phí không có gì và có hiệu quả đáng ngạc nhiên khi nói với bạn những gì cần có thời gian. –

Trả lời

6

Tùy thuộc vào nhu cầu của bạn và phiên bản python của bạn, có thể bạn muốn sử dụng một cái gì đó như hotshot. https://docs.python.org/2/library/hotshot.html

EDIT:

Đối với python 3.4 cProfile có lẽ là một sự lựa chọn tốt nhất mà bạn có sẵn nhưng bạn chắc chắn sẽ phải lọc các kết quả với grep/sed/awk để có thể có được kết quả có liên quan đặc biệt là nếu bạn sử dụng thư viện được nhập khi có nhiều cuộc gọi nội bộ xảy ra.

Tôi thích sắp xếp theo số lượng cuộc gọi: python -m cProfile -s 'calls' <your_program>.py

Bây giờ vấn đề trong python3 với phương pháp đó là số lượng cuộc gọi nguyên thủy mà sẽ hiển thị nếu cProfile được gọi từ bên ngoài, vì vậy chạy nó trong nội bộ có lẽ là một tốt hơn ý tưởng:

import cProfile 

pr = cProfile.Profile() 
pr.enable() 
your_function_call() 
pr.disable() 
# after your program ends 
pr.print_stats(sort="calls") 
+0

Tôi đang sử dụng Python 3.4. – Nickpick

+0

Tôi đã chỉnh sửa câu trả lời của mình cho Python3. – shafeen

3

Lưu ý: Như đã đề cập trong các ý kiến, sau đây áp dụng cho các phiên bản trả tiền của PyCharm:

Nếu sử dụng 3.x (không biết về 2.x), tôi sẽ thêm vào shafee n câu trả lời và làm cho nó thêm PyCharm cụ thể theo bài gốc. Điều này cũng hoạt động tốt hơn cho các ứng dụng web hoặc các ứng dụng lớn hơn so với các chương trình dòng lệnh đơn giản, nơi in đầu ra tới stdout có thể không sao (vẫn tốt hơn để có thể sắp xếp các cách khác nhau thông qua trình xem của PyCharm).

Thật vậy, hãy làm như được đề xuất bằng cách tạo hồ sơ và bật và tắt khi cần. Tuy nhiên, để làm điều đó hữu ích, bạn sẽ muốn lưu tệp này vào một tệp.

  • Trong phần bên ngoài mã của bạn, khởi tạo Hồ sơ.
  • Trong phần bên trong của mã, hãy làm hồ sơ của bạn.
  • Bây giờ, hãy gọi pr.dump_stats ('profile.pstat')

Bây giờ bạn có một tập tin cấu hình mà bạn muốn kiểm tra. Đi tới Công cụ | Mở ảnh chụp nhanh CProfile. Chọn profile.pstat và bây giờ bạn có thể xem và sắp xếp theo các tiêu đề khác nhau như mong muốn.

Tóm tắt

import cProfile as profile 

# In outer section of code 
pr = profile.Profile() 
pr.disable() 

# In section you want to profile 
pr.enable() 
# code of interest 
pr.disable() 

# Back in outer section of code 
pr.dump_stats('profile.pstat') 

mở tập tin trong xem cProfile PyCharm của.

+2

Thật không may plugin profiler là phiên bản Professional (không miễn phí) của PyCharm. – user1735003

Các vấn đề liên quan