tôi sửa đổi ví dụ của bạn như thế này:
with open(STAT_FILE, "r+b") as f:
m=mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ)
while True:
line=m.readline()
if line == '': break
print line.rstrip()
Gợi ý:
- không gọi một biến
map
, đây là một chức năng built-in.
- mở tệp ở
r+b
chế độ, như trong ví dụ Python trên trang trợ giúp mmap
. Nó tuyên bố: Trong cả hai trường hợp, bạn phải cung cấp một bộ mô tả tập tin cho một tập tin được mở để cập nhật. Xem http://docs.python.org/library/mmap.html#mmap.mmap.
- tốt hơn là không sử dụng tên biến toàn cầu
UPPER_CASE_WITH_UNDERSCORES
, như được đề cập trong Tên biến toàn cục tại http://www.python.org/dev/peps/pep-0008. Trong các ngôn ngữ lập trình khác (như C), hằng số thường được viết bằng chữ hoa.
Hy vọng điều này sẽ hữu ích.
EDIT: Tôi đã thực hiện một số kiểm tra thời gian trên Linux vì nhận xét khiến tôi tò mò. Dưới đây là so sánh về thời gian được thực hiện trên 5 lần chạy tuần tự trên tệp văn bản 137MB.
# normal file access.
real 2.410 2.414 2.428 2.478 2.490
sys 0.052 0.052 0.064 0.080 0.152
user 2.232 2.276 2.292 2.304 2.320
# mmap file access.
real 1.885 1.899 1.925 1.940 1.954
sys 0.088 0.108 0.108 0.116 0.120
user 1.696 1.732 1.736 1.744 1.752
Thời gian đó không bao gồm tuyên bố print
(Tôi đã loại trừ nó). Sau những con số này tôi muốn nói rằng bộ nhớ truy cập tập tin ánh xạ là khá nhanh hơn một chút.
EDIT 2: Sử dụngpython -m cProfile test.py
tôi có kết quả như sau:
5432833 2.273 0.000 2.273 0.000 {method 'readline' of 'file' objects}
5432833 1.451 0.000 1.451 0.000 {method 'readline' of 'mmap.mmap' objects}
Nếu tôi không nhầm thì mmap
là khá một chút nhanh hơn.
Ngoài ra, có vẻ như not len(line)
hoạt động kém hơn line == ''
, ít nhất đó là cách tôi giải thích đầu ra của hồ sơ.
Ra quan tâm, động lực cho việc sử dụng một tập tin bộ nhớ ánh xạ cho điều này là những gì, như trái ngược với một tập tin bình thường không? – NPE
@aix: Tôi có thể có dữ liệu thô của GB và tôi muốn truy cập chúng theo phương pháp hiệu quả nhất có thể. Nhưng lý do thực sự là: It's cooler :) –
Tôi không biết liệu nó có mát hay không, nhưng bạn không nên chỉ đơn giản giả định rằng nó nhanh hơn (nếu bạn thực sự quan tâm, bạn nên cấu hình). – NPE