1

PyQT (Qt バージョン: 4.8.3、PyQt バージョン 4.9.4) を使用して、膨大な数のページのスクリーンショットを作成しています。スレッド戦略を使用してパフォーマンスを向上させました。

それは数秒間 (約 30 秒) 魅力的なように機能し、突然、アプリは私の端末に奇妙な " select: Invalid argument " メッセージを送信します。

確かに、これは私のデバッグ メッセージの 1 つではありません。しかし、これは本当にランダムなので、どこで/なぜこれが起こっているのかを掘り下げることはできません.

これが役立つ場合は、スポーンするスレッドが多いほど、発生が速くなります。これはメモリの問題でしょうか?

これが役立つかどうかはわかりませんが、私が使用しているスポーン方法は次のとおりです。

def spawn(self):
    worker = Worker() # this is a QObject
    thread  = QThread()
    # When done, respawn a new thread
    self.connect(worker, SIGNAL("done()"), self.spawn) 
    # And stop the related thread
    self.connect(worker, SIGNAL("done()"), thread.quit)
    self.threadsPool.append(thread) # Keep-alive
    self.workersPool.append(worker) # Keep-alive
    worker.moveToThread(thread)
    thread.start()
    worker.start("myfancydomain.com")

助けてくれてありがとう!

4

1 に答える 1

0

ほとんどの場合、スレッドが削除されたときのスレッドへのアクセスに関係しています。

スレッドが終了または削除された後、threadsPoolがスレッドにアクセスしようとしていると思います。そして、どこかに、削除されたスレッドなどの不正なポインターにアクセスしているthreadsPool(または同様のコンテナー)によるスロットまたは関数呼び出しがあります。

これが問題であることを確認するには、別のスレッドまたはループで、threadsPool内のスレッドの数と、各スレッドに関する情報を照会します。最初のスレッドが終了した後、そのスレッドへのポインターを使用するとクラッシュすることは間違いありません。

于 2013-01-16T22:48:11.377 に答える