1

多くのxmlファイルを読み込んで解析する必要があるpyqt4でアプリを作成しています。シングルスレッドで実行すると、そのすべての解析を実行し、その着信 xml に対応する何千もの Python オブジェクトを作成するのに時間がかかります。コードのプロファイリングを行ったところ、I/O ではなくコンピューティングにバインドされていることがわかりました。

ワーカー ファーム モデル (Python の?Process.Pool) を使用して、アプリケーションをマルチコア モデルに変換して負荷を分散させたいと考えています。

ただし、ワーカーから進行状況を通知して GUI を更新できるようにしたいと考えています。

これまで読んだことから、QThreadはマルチコア対応ではないように思えますが(1つのコアでラウンドロビンするため)、Signalを実行するにはQThreadが必要なので、基本的にはできません。

ワーカーからのシグナルを必要とせず、ファーマーからのみのシグナルを送信する必要がないように手配できるかもしれません。これは、続行できることを意味するかもしれませんが、疑問に思うのは、あるプロセスから別のプロセスに Python オブジェクトのリストを返すことができるかということです。

4

1 に答える 1

5
  • QThread を生成します。
  • QThread は、マルチプロセッシング プールにタスクをファーム アウトできます。コールバック パラメータを持つpool.apply_async()を使用できます。
  • callback パラメーターを使用すると、ターゲット関数の完了時に呼び出される関数を指定できます。
  • コールバックは QThread で実行され、ターゲット関数の戻り値が唯一の引数として送信されます。
  • コールバック関数が実行されるたびに、GUI を更新して進行状況を示すことができます。
于 2013-01-19T02:15:09.650 に答える