5

私はマルチプロセッシングの初心者です、

スレッド化については知っていますが、できればマルチプロセッシングを使用して、この計算の速度を上げる必要があります。

例の説明:文字列をスレッドに送信し、文字列+ベンチマークテストを変更し、結果を送信して印刷します。

from threading import Thread

class Alter(Thread):
    def __init__(self, word):
        Thread.__init__(self)
        self.word = word
        self.word2 = ''

    def run(self):
        # Alter string + test processing speed
        for i in range(80000):
            self.word2 = self.word2 + self.word

# Send a string to be altered
thread1 = Alter('foo')
thread2 = Alter('bar')
thread1.start()
thread2.start()

#wait for both to finish
while thread1.is_alive() == True: pass
while thread2.is_alive() == True: pass


print(thread1.word2)
print(thread2.word2)

これは現在約6秒かかりますが、もっと速くする必要があります。
マルチプロセッシングを調べていますが、上記のコードに相当するものが見つかりません。私が求めているのはプーリングだと思いますが、私が見つけた例は理解しにくいものでした。すべてのコア(8コア)を利用したいmultiprocessing.cpu_count()のですが、実際にはマルチプロセッシングに関する有用な情報の断片があり、上記のコードを複製するのに十分ではありません。誰かが私を正しい方向に向けることができるか、それでももっと良いことがあれば、大いに感謝される例を提供してください。Python3お願いします

4

1 に答える 1

8

threadingmultiprocessingに置き換えるだけですThreadProcessPyton のスレッドは、大きな悪い GIL のために (ほとんど) パフォーマンスを向上させるために使用されることはありません! 別のSO-postで説明し、ドキュメントへのリンクとPython でのスレッド化についての素晴らしい話をしました。

ただし、マルチプロセッシングモジュールは、意図的にスレッド モジュールと非常に似ています。ドロップインの代替品としてほぼ使用できます。

multiprocessing モジュールは、特定の量のコアの使用を強制する機能を提供していません。OS の実装に依存します。Pool オブジェクトを使用して、worker-onjects をコア数に制限できます。または、pypar などの他の MPI ライブラリを探すこともできます。Linuxでは、シェルの下でパイプを使用して、異なるコアで複数のインスタンスを開始できます

于 2012-01-08T02:55:53.833 に答える