我打算經常從許多不同的文件中讀取/寫入小塊信息。以下有些人爲的例子顯示,使用os
操作直接操作文件描述符所花費的時間大大縮短。除了文件對象的便利性之外,我是否還有缺點?可以使用os.open/read/write/close嗎?
import os
import time
N = 10000
PATH = "/tmp/foo.test"
def testOpen():
for i in range(N):
with open(PATH, "wb") as fh:
fh.write("A")
for i in range(N):
with open(PATH, "rb") as fh:
s = fh.read()
def testOsOpen():
for i in range(N):
fd = os.open(PATH, os.O_CREAT | os.O_WRONLY)
try:
os.write(fd, "A")
finally:
os.close(fd)
for i in range(N):
fd = os.open(PATH, os.O_RDONLY)
try:
s = os.read(fd, 1)
finally:
os.close(fd)
if __name__ == "__main__":
for fn in testOpen, testOsOpen:
start = time.time()
fn()
print fn.func_name, "took", time.time() - start
採樣運行:
$ python bench.py
testOpen took 1.82302999496
testOsOpen took 0.436559915543
什麼版本的python? – user2682863
@ user2682863,它必須是Python 2 - 在Python 3中,低級IO操作需要並返回「像字節的對象」而不是字符串。也就是說,這段代碼不會在Py3下運行。 –
我正在使用2,但很好奇,如果有3值得注意的差異。 – Ben