我正在编写一个 Python 程序来从本地文件系统读取大约 110000 多个文本文件并将它们推送到 MongoDB。这是我的代码片段。
类 EmailProducer (threading.Thread):
def __init__(self, threadID, queue, path):
self.threadID = threadID
self.queue = queue
self.path = path
threading.Thread.__init__(self)
def run(self):
if (queue.empty()):
files = os.listdir(self.path)
print(len(files))
for file in files:
queue.put(file)
类 EmailConsumer (threading.Thread):
def __init__(self, threadID, queue, path, mongoConn):
self.threadID = threadID
self.queue = queue
self.mongoConn = mongoConn
self.path = path
threading.Thread.__init__(self)
def run(self):
while (True):
if (queue.empty()):
mongoConn.close()
break
file = queue.get()
self.mongoConn.persist(self.path, file)
EmailProducer 实例从本地文件系统读取文件,如果队列为空,则将它们存储在队列中;和 EmailConsumer 实例从队列中获取文件并将它们推送到 Mongo。我还编写了相同功能的顺序版本。我在带有 i-5 四核处理器的 ubuntu 12.04 32 位台式机上同时运行它们,并对它们进行了计时。多线程版本从 1 个生产者和 7 个消费者开始。但是,它们都花费了大约 23.7 秒的实时时间和 21.7 秒的用户时间。我认为线程在这里会有所帮助,但数字告诉我它没有帮助。
任何人对原因有任何深刻的想法吗?