状況
私はを使用して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でマルチスレッド化する適切な方法ではなく、回避策のようです。
何かお勧めはありますか?