五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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的評論 (共 條)

分享到微博請遵守國家法律
高州市| 金沙县| 静乐县| 阜平县| 诸暨市| 通渭县| 香格里拉县| 象山县| 上虞市| 合作市| 剑阁县| 卫辉市| 榆树市| 镇沅| 三原县| 宜宾市| 且末县| 大渡口区| 济阳县| 淮滨县| 开原市| 太保市| 南丹县| 迁西县| 泸溪县| 道真| 孟州市| 印江| 博爱县| 甘洛县| 凌源市| 白城市| 禹州市| 留坝县| 余姚市| 霸州市| 宁海县| 江都市| 玉树县| 临汾市| 吴江市|