2016-12-02 368 views
2

我有一個應用程序,我應該使用QWebSocketServer來接受和解析來自Bokeh應用程序的一些套接字消息。到目前爲止,我能夠做到這一點,但現在我想將整個QWebSocketServer移動到另一個線程中,以便它不會打擾主GUI。主要問題是QWebSocketServer是否會影響GUI?QWebSocketServer到不同的線程

作爲QWebSocketServer的父母,我無法將它移動到另一個線程。如果我繼承QThread類,這會工作嗎?

我知道我不應該繼承QThread類和超載運行方法。我只是想知道這是否可能。

僅供參考:我在Raspberry pi中做了所有這些工作,並且覆盆子pi必須做大量的數據收集。

+1

Web套接字異步運行,所以使用線程有什麼意義?這聽起來像是不成熟的優化,對我來說。這在GUI中導致什麼***特定問題? – ekhumoro

+0

這個時候它不會造成任何問題,因爲在這個階段GUI很小,但是在後期它會變得更大。我只是想知道是否可以將服務器移動到另一個線程。 –

+1

但爲什麼要麻煩?它會解決什麼樣的實際問題? – ekhumoro

回答

0

我初始化QWebSocketServer沒有父母,並將其移動到另一個線程,它的工作。我不知道我是否做得對。

Im做這樣的: -

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

這裏SocketServer的是服務器類繼承QObject(),並QWebSocketServer獲取它定義,任何父母。

這裏是SocketServer類的一小段: -

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) 

不要忘記啓動線程。

+0

看起來正確。你的問題是有一個家長。您不能將對象移動到與其父對象不同的線程。即你只能將對象移動到沒有父對象的其他線程。 –

+0

但是,當然,正如在問題的評論中指出的那樣,如果您希望程序難以調試並且比所需的更復雜,這實際上是非常必要的。通常都是非常糟糕的原因 –

+0

是的,如果我們有更多的線程,處理器大部分時間花費切換線程。相反,我只是遵循一些範例,將GUI和其他操作分開來分離線程。 –