なしより遅いマルチプロセッシングでテキストファイルを読みます

Aenaon:

私は、私は、Pythonで読む必要があるいくつかのテキストファイルを持っています。テキストファイルのみ(文字列すなわち)floatの配列を維持し、配列のサイズは2000で-2000です。私が使用しようとしたmultiprocessingパッケージをいくつかの理由で、それは今の実行速度は低下します。以下に添付のコードのために私のPC上で私が持っている時間があります

  • マルチスレッド:73.89秒
  • シングルスレッド:60.47秒

私はここで間違ってやっている何を、この作業をスピードアップする方法はありますか?私のPCは、インテルCore i7プロセッサーを搭載しているし、実際の生活の中で私は、これらのテキストファイル、600またはそれ以上の数百を持っています。

import numpy as np
from multiprocessing.dummy import Pool as ThreadPool
import os
import time
from datetime import datetime


def read_from_disk(full_path):
    print('%s reading %s' % (datetime.now().strftime('%H:%M:%S'), full_path))
    out = np.genfromtxt(full_path, delimiter=',')
    return out

def make_single_path(n):
    return r"./dump/%d.csv" % n

def save_flatfiles(n):
    for i in range(n):
        temp = np.random.random((2000, 2000))
        _path = os.path.join('.', 'dump', str(i)+'.csv')
        np.savetxt(_path, temp, delimiter=',')


if __name__ == "__main__":
    # make some text files
    n = 10
    save_flatfiles(n)

    # list with the paths to the text files
    file_list = [make_single_path(d) for d in range(n)]

    pool = ThreadPool(8)
    start = time.time()
    results = pool.map(read_from_disk, file_list)
    pool.close()
    pool.join()
    print('finished multi thread in %s' % (time.time()-start))

    start = time.time()
    for d in file_list:
        out = read_from_disk(d)
    print('finished single thread in %s' % (time.time() - start))
    print('Done')
Shubhamシャルマ:

あなたは、使用しているmultiprocessing.dummyマルチプロセッシングのAPIを複製しているが、実際には、threadingモジュールのラッパーです。

基本的に使用している、だから、Threads代わりにProcessそして、threadsあなたは計算タスクを実行するときにpythonで(GILのために)有用ではありません。

だから、交換してください:

from multiprocessing.dummy import Pool as ThreadPool

と:

from multiprocessing import Pool

私は持っ自分のマシン上でコードを実行してみたi5 processor45秒で、その完成実行を。ので、私はそれは大きな改善だと言うでしょう。

これはあなたの理解をクリア願っています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=351268&siteId=1
おすすめ