ローカル ファイル システムから約 110000 以上のテキスト ファイルを読み取り、それらを MongoDB にプッシュする Python プログラムを作成しています。これが私のコードスニペットです。
クラス 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 秒かかります。ここではスレッド化が役立つと思いましたが、数字はそれが役に立たないことを教えてくれました。
その理由について洞察に満ちた考えを持っている人はいますか?