我想使用多个进程同时读取一个大型CSV,每个CPU核心一个。每个都将传递文件名和偏移量并使用
打开文件 CX3$Z6SQLCXTPPVPJP6SQLXD384K7FP
打开文件进行并发读取是否有问题,然后使用file_offset, lines_to_read = ... #Passed to each process
with open(filename, 'r') as f:
f.seek(offset)
for row_count, row in enumerate(csv.reader(f)):
if row_count == lines_to_read:
break
do_stuff(row[0], row[1], ...)
这样缩放到特定的偏移量?
答案 0 :(得分:2)
是的,倍数进程可以从文件读取,而不会破坏读取的数据。一个竞争write
可能使所有读者无效。
但是,这样做的效用取决于您的设备。如果您的物理设备需要等待中等旋转或定位读取头,则您的进程将相互竞争该资源。也许更糟糕的是,在大多数情况下,预测和预取软件可能会猜测错误,降低读取性能。
如果你的情况不同,也许是一些多通道直接访问读取介质,那么这确实可以为你提供更快的性能。在这种情况下,请注意你的驾驶员的缓冲能力,这样你就不会超负荷,只是改变你的瓶颈。