Trên UNIX: (a) sử dụng resource mô-đun (xem thêm câu trả lời bằng icktoofay), hoặc (b) sử dụng lệnh time và phân tích kết quả, hoặc (c) sử dụng /proc hệ thống tập tin, phân tích/proc/[ pid]/stat và phân tích cú pháp ra các trường utime
và stime
. Điều cuối cùng trong số này là dành riêng cho Linux.
Ví dụ về sử dụng resource
:
import subprocess, resource
usage_start = resource.getrusage(resource.RUSAGE_CHILDREN)
subprocess.call(["yourcommand"])
usage_end = resource.getrusage(resource.RUSAGE_CHILDREN)
cpu_time = usage_end.ru_utime - usage_start.ru_utime
Lưu ý: nó không phải là cần thiết để làm ngã ba/execvp, subprocess.call()
hay subprocess phương pháp khác cũng tốt ở đây và dễ dàng hơn để sử dụng.
Lưu ý: bạn có thể chạy nhiều lệnh từ cùng một tập lệnh python đồng thời hoặc sử dụng subprocess.Popen hoặc subprocess.call và luồng, nhưng tài nguyên sẽ không trả về đúng thời gian cpu riêng của nó, nó sẽ trả về tổng thời gian của chúng trong giữa các cuộc gọi đến getrusage; để có được thời gian riêng lẻ, hãy chạy một trình bao nhỏ python cho mỗi lệnh theo thời gian như trên (có thể khởi chạy từ kịch bản chính của bạn) hoặc sử dụng phương thức time
bên dưới, sẽ hoạt động chính xác với nhiều lệnh đồng thời (thời gian cơ bản là như vậy một wrapper).
Ví dụ về sử dụng time
:
import subprocess, StringIO
time_output = StringIO.StringIO()
subprocess.call(["time", "yourcommand", "youroptions"], stdout=time_output)
# parse time_output
Trên Windows: Bạn cần phải sử dụng bộ đếm hiệu suất (aka "hiệu suất giúp việc dữ liệu") bằng cách nào đó. Đây là một C example của API cơ bản. Để lấy nó từ python, bạn có thể sử dụng một trong hai mô-đun: win32pdh (một phần của pywin32; sample code) hoặc pyrfcon (nền tảng chéo, cũng hoạt động trên Unix; sample code).
Bất kỳ phương pháp nào trong số này thực sự đáp ứng các yêu cầu "chế độ khó" ở trên: chúng phải chính xác ngay cả với nhiều phiên bản đang chạy khác nhau trên một hệ thống bận. Chúng có thể không tạo ra kết quả chính xác trong trường hợp đó so với chỉ chạy một tiến trình trên hệ thống nhàn rỗi, bởi vì quá trình chuyển đổi có một số chi phí, nhưng chúng sẽ rất gần, vì cuối cùng chúng thu thập dữ liệu của chúng từ bộ lập lịch OS.
Điều này có phải là đa nền tảng không? Nếu không, hệ điều hành nào được cho là chạy? Hầu hết các hệ điều hành đều cung cấp quyền truy cập vào các bộ tính giờ khác nhau, nhưng các hệ điều hành chính xác nhất có thể yêu cầu đặc quyền nâng cao. –
Chỉ cần Linux là tốt, Windows tương thích được đánh giá cao nhưng không cần thiết. –