最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

PySide多進(jìn)程通訊之QLocalServer

2023-08-26 14:34 作者:寶寶龍的爸爸  | 我要投稿

環(huán)境

  • PySide6

  • Python3.8

  • Win 11

PySide是Qt框架的官方Python語言的綁定。以下Qt。

Qt常用的進(jìn)程間通訊模式很多,以下是個人比較常用的。:

  • socket(套接字)通訊 QLocalServer 對于標(biāo)準(zhǔn)庫的? socket

  • 管道和隊列, multiprocessing.Pipe, multiprocessing.Queue 之類

  • 共享內(nèi)存? QSharedMemory 對應(yīng)標(biāo)準(zhǔn)庫 multiprocessing.shared_memory 模塊

本篇是關(guān)于多進(jìn)程套接字通訊的基本使用的


主要用到兩個類

  • QLocalServer

  • QLocalSocket

分別相當(dāng)于服務(wù)端和客戶端。

和標(biāo)準(zhǔn)的socket不同,Qt的本地套接字通訊要簡單的多。


由于我們常見的場景主要是從子進(jìn)程獲取輸出,所以這里主進(jìn)程使用QLocalServer, 子進(jìn)程使用QLocalSocket


先說主進(jìn)程部分的 QLocalServer, 用過標(biāo)準(zhǔn)庫的 selectors 模塊的應(yīng)該比較熟悉。一般服務(wù)端套接字的處理過程分2個步驟:

  1. 接受一個客戶端的連接。

  2. 監(jiān)聽次客戶端發(fā)來的數(shù)據(jù)

QT使用信號機(jī)制來完成以上的2個步驟。相對于標(biāo)準(zhǔn)庫的 selectors,寫法上更簡潔。

先介紹2個信號

  • QLocalServer.newConnection? 表示此時有客戶端連接到服務(wù)端

  • QLocalSocket.readRead 表示socket有數(shù)據(jù)到來,可以進(jìn)行讀取


服務(wù)端函數(shù)

  1. 首先創(chuàng)建一個 QLocalServer 對象

  2. 然后注冊客戶端連接信號,并在客戶端連接信號的槽函數(shù)里,為客戶端的readyRead信號注冊一個讀取數(shù)據(jù)的槽函數(shù)

# 創(chuàng)建一個 QLocalServer 對象, 其本身雖然不是繼承于QThread,但其行為類似線程/事件循環(huán)

class SomethingQ(QDalog):
 ?
 ?...

 ?def run_server(self):
 ? ?self.server = QLocalServer() ?
 ? ?# 注冊連接信號, 類似于 selectors 里面的 accept_cli
 ? ?self.server.newConnection.connect(self.new_connection)
 ? ?self.server.listen("hello") ?# 開始監(jiān)聽


 ?def new_connection(self):
 ? ? ?# 取出客戶端
 ? ? ?sock: QLocalSocket = self.server.nextPendingConnection()
 ? ? ?# 注冊客戶端的readyRead信號,類似 selectors 里面的 read_cli 
 ? ? ?sock.readyRead.connect(partial(self.ready_read, sock=sock))

 ?def ready_read(self, sock: QLocalSocket):
 ? ? ?# 從客戶端讀取數(shù)據(jù),類似 selectors 里面的 read_cli 
 ? ? ?data = sock.readAll() ?# 讀取全部數(shù)據(jù)
 ? ? ?...


客戶端函數(shù)

QLocalSocket的使用和標(biāo)準(zhǔn)庫的socket很像,不過連接服務(wù)端使用的不是ip和端口而是字符串。

client.connect_server("your server name")

然后就可以使用 writeData 或者 write 函數(shù)寫入數(shù)據(jù)了,2個函數(shù)的區(qū)別是前者是2個參數(shù),第一個參數(shù)是字節(jié),第二個參數(shù)是發(fā)送的數(shù)據(jù)長度,而后者只有第一個參數(shù)。

sock.writeData(data_bytes, len(mes)) ?# 方法1
# sock.write(data_bytes) ?# 方法2

【PySide多進(jìn)程通訊之QLocalServer-嗶哩嗶哩】 https://b23.tv/0dMnKnE

PySide多進(jìn)程通訊之QLocalServer的評論 (共 條)

分享到微博請遵守國家法律
区。| 永福县| 康马县| 宁乡县| 沙坪坝区| 彭山县| 江阴市| 逊克县| 杂多县| 湾仔区| 偃师市| 高阳县| 潍坊市| 台北市| 蓝山县| 四会市| 泽州县| 永安市| 大姚县| 新巴尔虎左旗| 屏山县| 崇仁县| 遵义市| 庆元县| 龙井市| 呼玛县| 乐安县| 福安市| 汝州市| 新田县| 兴化市| 阳曲县| 阳山县| 衡山县| 郓城县| 加查县| 遵化市| 偃师市| 府谷县| 扎赉特旗| 彭州市|