在python中,同时打开同一文件上的多个文件句柄是可以接受的做法吗?
例如:在python中,同时打开同一文件上的多个文件句柄是可以接受的做法吗?,python,io,Python,Io,例如: bedpath = "/tmp/bedtest" with open(bedpath, "rb") as fh1, open(bedpath, "rb") as fh2: fh1.seek(3) fh2.seek(5) for i in range(3): b1 = fh1.read(1) b2 = fh2.read(1) # do something with b1 and b2 如果没有,原因是什么?是的,我这
bedpath = "/tmp/bedtest"
with open(bedpath, "rb") as fh1, open(bedpath, "rb") as fh2:
fh1.seek(3)
fh2.seek(5)
for i in range(3):
b1 = fh1.read(1)
b2 = fh2.read(1)
# do something with b1 and b2
如果没有,原因是什么?是的,我这样做是为了在多个线程中读取同一个文件,效果很好。但是,如果您试图提高速度,很可能无论如何都会受到i/o限制。对于读取文件,这是可以接受的,尤其是当您需要多个搜索位置时 为了修改文件,最好不要尝试(对MartijnPieters的评论)
- 初学者(不是指你)经常试图在同一时刻阅读和修改一个文件,不理解文本行不是文件如何存储在磁盘上的。这就是我所说的简单失败
- 您可以在读取文件时尝试修改文件,也可以从多个文件描述符中修改文件。但这是相当复杂的,而且大多数情况下可以通过一些更简单的方法来避免,即理解和维护几个数量级的方法
io
库使这些语义非常清晰易懂。@MartijnPieters您能在回答中详细说明“文件对象的语义”吗?@qed:如果您了解Python 3 I/O(或在Python 2中使用io.open()
)使用的是a,那么您也知道读取会填充缓冲区。写入磁盘同样使用缓冲区。如果文件内容发生更改,内存缓冲区可能会不同步。