python - 使用不同的线程读取文件

标签 python multithreading

我正在尝试使用 Python 读取和修改多个文件的每一行。每个文件都有数千到数十万行,因此每个文件只有在处理另一个文件之后才会被处理。我正在尝试读取如下文件:

csvReader = csv.reader(open("file","r")
for row in csvReader:
    handleRow(row)

我想使用多线程来使用不同的线程并行读取每个文件,以节省时间。谁能指出它是否有用以及如何实现?

最佳答案

它可能有用,也可能没用——如果所有文件都在同一个驱动器上,并且您已经以最快的速度插入驱动器,那么多路复用只会减慢速度。但如果您没有最大化 I/O,它会加快速度。

至于如何做到这一点,那是微不足道的。将代码包装在采用路径名的函数中,然后使用并发.futures.ThreadPoolExecutor 或 multiprocessing.dummy.Pool,只需一行代码即可将您的函数映射到整个可迭代的路径名:

with ThreadPoolExecutor(4) as executor:
    executor.map(func, paths)

还有一件事:如果你不能最大化 I/O 的原因是因为你在每一行上做了太多的 CPU 工作,线程在 Python 中不会有帮助(因为 GIL),但是你可以只使用进程——完全相同的代码,但使用 ProcessorPoolExecutor。

关于python - 使用不同的线程读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471122/

相关文章:

python - 是否可以从 C++ header 中自动包含 CMake + SWIG + Python?

multithreading - Akka如何达到如此高的性能?

python - 如何内存 **kwargs?

python - 将 'None' 作为函数参数传递(其中参数是函数)

javascript - $.param 序列化对象到 JSON

python - 在 python 中使用 matplotlib 创建 3D 曲面图

python - Ipython 并行和多核进程

java - 线程 JLabel 的更改图标位于另一个更改图标之上

multithreading - 互斥锁是否也适用于被调用的函数?

Java parallelStream 不使用预期的线程数