python - 如何将文件分成 block 以进行多处理

标签 python algorithm file seek mrjob

我有大约 1.5 Gb 的文件,我想将文件分成 block ,以便我可以使用多处理来使用 python 中的 pp(并行 python)模块处理每个 block 。到目前为止,我已经在 python 中使用了 f.seek,但它需要很多时间,因为它可能会逐字节递增。那么替代方法是什么? 我可以通过 python 的 mrjob(map-reduce package) 来实现吗?

示例代码:我正在做这样的事情

def multi(i,slots,,file_name,date):
f1=open(date+'/'+file_name,"rb")
f1.seek(i*slots*69)
data=f1.read(69)
counter=0
print 'process',i
while counter<slots:
    ##do some processing
    counter+=1
    data=f1.read(69)

我的每一行都包含一个 69 字节的元组数据,Multi 函数被并行调用 n 次(这里 n 等于槽)来完成这项工作

最佳答案

为什么不打开文件的多个句柄?这样,您只需为每个句柄“寻找”一次。

f1 = open('file')

f2 = open('file')
f2.seek(100) # in practice the number would be <file size>/<no of threads>

f3 = open('file')
f3.seek(200)

关于python - 如何将文件分成 block 以进行多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22143829/

相关文章:

algorithm - 对于小数,最有效的整数 n 次根算法是什么?

php - html文件夹外的文件和图像

javascript - 类型错误 : The comparison function must be either a function or undefined

c# - 用颜色填充点之间空间的算法

c++ - 打开一个文件,修改每个字符然后做反向操作不输出原始文件

android - 将文件存储在 Cordova App 的文件夹中

python - 使用 Python 抓取 HTTP 横幅

python - 如何调试python中的缩进错误

python - 从排列列表中获取所有独特的组合

python - 使用 Python 备份 Postgresql 数据库