1

状況

私はを使用してpython 2.7います。を利用したGUIを備えたアプリケーションに取り組んでいますPyQt4

ウィジェットにボタンがあり、クリックすると、ユーザーが指定したIDの範囲が要求されます。ユーザーは、プログラムが「ジョブ」に割り当てるスレッドの数を指定できます。

私のオリジナルのアイデア

ボタンはジョブスレッドを生成し、IDの範囲とスレッド数を渡します。次に、ジョブスレッドは子スレッドを作成し、必要に応じて範囲からIDを渡すことができます。

すべてのIDがフェッチされると、ジョブスレッドはすべてのワーカースレッドを停止してから、それ自体を停止できます。

シグナル/スロットを利用して、ジョブ内のワーカースレッドによってフェッチされるデータでGUI要素を更新します。

私はスレッドを使用しているので、フェッチプロセス中にGUIは対話可能のままです。

問題

「恐ろしいPyQtマルチスレッドの問題」は、スレッド内からスレッドを生成しようとしたときに発生しました。

QObject: Cannot create children for a parent that is in a different thread.

私の回避策

ボタンを含むウィジェットからジョブスレッドとワーカースレッドを生成しただけなので、スレッド内からスレッドが生成されないようにしてから、ワーカースレッドをジョブスレッドに「接続」しました。

aJobaThread = ScrapeThread(self, aJob)がマスタージョブスレッドであるアラ。

これは機能しているように見えますが、これを行うための適切な方法以上の回避策のように感じます。

質問

私がしたことは、PyQtでマルチスレッド化する適切な方法ではなく、回避策のようです。

何かお勧めはありますか?

4

0 に答える 0