2013-10-30 13 views
5

Tôi đã thực hiện một chương trình đơn giản, tìm kiếm một tệp cụ thể trong một thư mục cụ thể.
Vấn đề với chương trình là nó chạy rất chậm lần đầu tiên, nhưng rất nhanh so với lần đầu tiên khi bạn chạy nó sau đó. Tôi đang dán một ảnh chụp màn hình của cùng một. Tôi muốn biết, tại sao nó như vậy? Tôi đã phát hiện ra điều tương tự trên cả windows 7 cũng như ubuntu 12.04 LTS, nhưng chênh lệch tốc độ (hoặc chênh lệch thời gian là rất lớn trên windows 7. enter image description hereTại sao các chương trình python chạy rất chậm trong lần đầu tiên?

Xem chênh lệch thời gian giữa tìm kiếm thứ hai và thứ ba .. Đầu tiên mất 81.136 giây và lần thứ hai mất 6.45 giây, mặc dù chúng tôi đang tìm kiếm cùng một thư mục

+2

Có thể là do lần thứ hai chạy .pyc –

+8

Không liên quan gì đến Python. Các tập tin được quét sẽ vẫn nằm trong bộ đệm hệ thống tập tin của hệ điều hành, vì vậy không yêu cầu nhiều quyền truy cập đĩa như lần chạy đầu tiên ... –

+0

Bạn có ý nói rằng khi chúng tôi liệt kê các tệp trong một thư mục, nó sẽ giữ "danh sách "của các tệp được quét trong bộ nhớ cache? –

Trả lời

9

Không có gì liên quan đến Python. Các tệp được quét sẽ vẫn nằm trong bộ nhớ cache của hệ thống tệp, vì vậy không yêu cầu truy cập nhiều đĩa như lần chạy đầu tiên ...

Bạn có thể tạo lại bằng một cái gì đó như:

with open('a 100mb or so file') as fin: 
    filedata = fin.read() 

Vào lần chạy thứ hai, có khả năng tệp vẫn còn trong bộ nhớ thay vì đĩa, do đó, lần chạy thứ hai sẽ nhanh hơn đáng kể.

+2

Vì vậy, nó _not_ các tập tin '.pyc'? –

+4

@GamesBrainiac err no ... tất nhiên là có một sự tăng tốc liên quan đến Python sử dụng các tệp 'pyc' nhưng nó không nằm trên thang đo được hiển thị. Nó chỉ là bộ nhớ đệm xảy ra ở cấp hệ điều hành ... –

+0

Không, sự khác biệt về thời gian này không liên quan gì đến thời gian biên dịch. – Matthias

6

Hệ thống hiện đại tối ưu hóa quyền truy cập vào dữ liệu được truy cập gần đây bằng cách sử dụng cơ chế lưu vào bộ nhớ cache. Đây có lẽ là những gì xảy ra trong trường hợp của bạn. Vì vậy, nó không phải về Python nhưng về hệ điều hành và lưu trữ.

Đây là kết quả cho thao tác tìm cơ bản (không liên quan gì đến Python) được thực thi liên tiếp trên máy của tôi.

time find /usr/ -name java 
... 
real 1m15.946s 

time find /usr/ -name java 
... 
real 0m24.577s 
+3

Ví dụ hay để nhấn mạnh không liên quan gì đến Python ... –

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