Python文件系统瓶颈,我该如何解决这个问题?

时间:2014-02-10 18:40:19

标签: python file

所以基本上我有一个看起来像这样的文件夹:

MyFolder\
          data_1.txt
          data_2.txt
          data_3.txt
          ...
          data_very_large_number.txt

我想处理每个文件。我的计划是运行10个脚本实例,每个脚本处理1/10个文件。

基本上,我做了以下事情:

 python script.py 1
 python script.py 2
 ...
 python script.py 10

但是我注意到只有script.py的第一个实例实际上正在处理任何事情。在第一个实例完成处理后,第二个实例开始处理。我猜这是文件系统的瓶颈。

有没有人知道如何用Python解决这个问题?

3 个答案:

答案 0 :(得分:1)

有很多方法可以并行运行这些脚本,但是如果你想从命令行手动启动它们,你应该这样做:

python script.py 1 &
python script.py 2 &

等等。

答案 1 :(得分:1)

使用适合系统内存的大量文件,使用ramdisk可以显着提高性能,请查看:

http://www.cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem/

要创建ramdisk,只需执行以下操作:

# mkfs -q /dev/ram1 8192
# mkdir -p /ramcache
# mount /dev/ram1 /ramcache

答案 2 :(得分:0)

使用Queuethreading

import queue,threading
import glob

q = queue.Queue()
for file in glob.glob(r"MyFolder\data_*.txt"): q.add(file)

class doStuff(threading.Thread):
    def __init__(self,q):
        self.q = q
        super().__init__()
    def run(self):
        while True:
            file = None
            try: file = q.get_nowait()
            except Queue.Empty: return # end thread
            if file is None: continue
            # if we failed to get a file, forget it
            # DO STUFF WITH YOUR FILE
            #
            # DO STUFF WITH YOUR FILE

for _ in range(10):
    t = doStuff(q)
    t.daemon = True
    t.start()