2

セルオートマトンの状態を評価して画面に描画する小さなプログラムを書きました。私はデュアルコア PC を持っているので、効率を上げるために 2 つのスレッドで計算を行うことにしました。次のように、QThread の独自の実装を作成しました。

clacc MyThread(QThread):
    def run(self):
        ...

次に、このクラスの 2 つのインスタンスを作成して呼び出します。

thread1 = MyThread()
thread2 = MyThread()

thread1.start()
thread2.start()

タスク マネージャーを開くと、スレッド 1 が最初に実行され、次にスレッド 2 が実行され、次にスレッド 1 が実行されていることがわかりました。問題は、それらを呼び出して、別々のコアで、次々にではなく、ある瞬間に独立して動作するようにする方法はありますか?

4

1 に答える 1

2

スレッドを使用すると、並列化が行われないため、思うように効率を上げることはできません。マルチプロセッシングを行う必要があります。これを行うには、threading モジュールのように機能する mulltiprocessing モジュールを使用できます。

import multiprocessing

class MyProcess(multiprocessing.Process):

    def run(self):
        # new process context

同じコンテキストを共有しないため、メソッド呼び出しによって直接通信することはできません。次のような「メッセージキュー」システムを使用することをお勧めします:multiprocessing.Queueまたはzeromq(素晴らしい素晴らしいライブラリ!)。

"Ventillator" zmq 設計パターンを見ると、必要なことを正確に実行することがわかります: ワーカーを並列化します。

于 2012-05-18T16:04:26.387 に答える