小编Alb*_*rto的帖子

从python中的多个线程读取单个文件

我在python中编写了一个多线程解压缩程序.每个线程都需要访问输入文件的不同块.

注1:无法加载整个文件,因为它的范围从15 Gb到200 Gb; 我不是使用多线程来加速数据读取,而是数据解压缩,我只是想确保数据读取不会减慢解压缩速度.

注2:GIL不是问题,这里,因为主解压缩器函数是C扩展,它调用Py_ALLOW_THREADS,因此在解压缩时释放GIL.第二阶段减压使用numpy,也是无GIL的.

1)我假设它不能简单地共享一个Decompressor对象(基本上包装文件对象),因为如果线程A调用以下内容:

decompressor.seek(x)
decompressor.read(1024)
Run Code Online (Sandbox Code Playgroud)

并且线程B也是这样,线程A可能最终从线程B偏移读取.它是否正确?

2)现在我只是让每个线程创建自己的Decompressor实例,它似乎工作,但我不确定这是最好的方法.我考虑过这些可能性:

  • 添加类似的东西

    seekandread(from_where, length)
    
    Run Code Online (Sandbox Code Playgroud)

    到解压缩器类获取锁,寻找,读取和释放锁;

  • 创建一个等待读取请求并以正确顺序执行它们的线程.

那么,我错过了一个明显的解决方案吗?这些方法之间是否存在显着的性能差异?

谢谢

python file-io multithreading

7
推荐指数
1
解决办法
4167
查看次数

如果程序在仅EABI内核中进行OABI样式的系统调用会发生什么?

或者更一般地说,如果在这样的内核上执行带有操作码!= 0的swi指令会发生什么?它会产生信号吗?我问,因为我想陷阱.

linux arm

6
推荐指数
1
解决办法
796
查看次数

标签 统计

arm ×1

file-io ×1

linux ×1

multithreading ×1

python ×1