2016-12-02 5 views
2

私はQWebSocketServerを使用して、Bokehアプリケーションからのソケットメッセージを受け取って解析する必要があるアプリケーションがあります。私はこれまでこれを行うことができましたが、今はQWebSocketServer全体を別のスレッドに移動したいので、メインGUIを気にしないでください。とにかくQWebSocketServerはGUIに影響を与えますか?QWebSocketServerを別のスレッドに

GUIがQWebSocketServerの親であるため、別のスレッドに移動できませんでした。私はQThreadクラスを継承する場合、これは動作しますか?

私はQThreadクラスを継承してはならず、メソッドをオーバーロードするべきではないことを知っています。私はこれが可能かどうか疑問に思っています。

参考:ラズベリーパイでこれをやっていますし、ラズベリーパイは多くのデータ収集をしなければなりません。

+1

Webソケットは非同期で動作するため、このためにスレッドを使用する際のポイントは何ですか?早すぎる最適化のように思えます。 ***具体的な***問題は、これがGUIの原因ですか? – ekhumoro

+0

GUIはこの段階では小さいので、現時点では問題はありませんが、後の段階ではかなり大きくなります。私は、サーバーを別のスレッドに移動することが可能かどうか疑問に思っていました。 –

+1

しかし、なぜ迷惑?どのような実際の問題が解決するだろうか? – ekhumoro

答えて

0

親なしのQWebSocketServerを初期化し、別のスレッドに移動して動作させました。私は正しいことをしているのか分かりません。このようにすること

イム: -

self.server = SocketServer() 
    self.serverThread = QThread() 
    self.server.moveToThread(self.serverThread) 

はここでSocketServer QObject()を継承するサーバークラスであり、そしてQWebSocketServerは、任意の親うちに、それに定義されます。

onMessageRecieved = pyqtSignal(str) 
    serverObject = QWebSocketServer("My Server",QWebSocketServer.NonSecureMode) 
    def __init__(self,parent=None): 
     super().__init__(parent) 
     self.server = QWebSocketServer(self.serverObject.serverName(),self.serverObject.secureMode(),parent) 

とスレッドを開始することを忘れてはいけない - :

はここSocketServerクラスの短い抜粋です。

+0

これは正しいようです。あなたの問題には親がいました。親が実行しているスレッドとは別のスレッドにオブジェクトを移動することはできません。私。親を持たない他のスレッドにのみオブジェクトを移動することができます。 –

+0

しかしもちろん、あなたのプログラムをデバッグするのが難しく、必要以上に複雑にしたい場合は、このコメントへのコメントで指摘したように、これは本当に必要です。どちらも通常非常に悪い理由 –

+0

はい、実際には、スレッドがさらに増えた場合、プロセッサはほとんどの時間スレッドを費やします。代わりにパラダイムに従うだけで、GUIと他のアクションを分離してスレッドを分離するものもあります。 –

関連する問題