所以基本上我有一个看起来像这样的文件夹:
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解决这个问题?
答案 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)
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()