2012-11-08 43 views
11

Tôi có một tập lệnh Python xử lý một tệp văn bản lớn (với khoảng 4 millon dòng) và ghi dữ liệu vào hai tệp riêng biệt.Hiệu suất hoạt động của việc sử dụng các câu lệnh in trong tập lệnh Python

Tôi đã thêm tuyên bố in, sẽ xuất ra một chuỗi cho mỗi dòng để gỡ lỗi. Tôi muốn biết làm thế nào xấu nó có thể được từ quan điểm hiệu suất?

Nếu điều này rất tệ, tôi có thể xóa dòng gỡ lỗi.

Sửa

Nó chỉ ra rằng có một tuyên bố in cho tất cả các dòng trong một tập tin với 4 triệu dòng đang gia tăng thời gian quá nhiều.

+4

Hãy thử và xem cho chính mình? – NPE

+3

'timeit' http://docs.python.org/2/library/timeit.html – wim

+0

Nó sẽ chậm hơn khi bạn phải thực hiện một số lượng lớn các bản in, bất kỳ xử lý bổ sung nào cũng sẽ phải chịu một số hình phạt về hiệu suất. –

Trả lời

16

Cố gắng làm việc đó trong một kịch bản rất đơn giản chỉ để cho vui, sự khác biệt là khá đáng kinh ngạc:

Trong large.py:

target = open('target.txt', 'w') 

for item in xrange(4000000): 
    target.write(str(item)+'\n') 
    print item 

Timing nó:

[[email protected] /tmp]$ time python large.py 
real 1m51.690s 
user 0m10.531s 
sys  0m6.129s 

[email protected] /tmp]$ ls -lah target.txt 
-rw-rw-r--. 1 gp gp 30M Nov 8 16:06 target.txt 

Bây giờ chạy giống với "in" đã nhận xét:

[email protected] /tmp]$ time python large.py 
real 0m2.584s 
user 0m2.536s 
sys  0m0.040s 
+2

Và khi bạn nhận xét ghi, hãy để lại trong bản in và chạy với '> target.txt'? – Tim

+0

@Tim: Thật kỳ lạ là nó hoạt động nhanh hơn, nhưng có thể máy của tôi kém bận rộn hơn khi tôi chạy nó sớm hơn, không có thời gian để chạy nó nhiều lần để sử dụng cách tiếp cận thống kê âm thanh hơn. [Gp @ imdev1/tmp] $ thời gian trăn large.py> target.txt thực \t 0m1.954s dùng \t 0m1.897s sys \t 0m0.049s – GSP

+4

chuyển hướng stdout vào một tập tin sẽ được nhanh hơn nhiều, trên thực tế bạn có thể hướng đến một tập tin và mở tập tin trong một trình soạn thảo trong thời gian ít hơn cần thiết để phun một lượng lớn io lên màn hình. – agentp

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