python實(shí)現(xiàn)多線程及線程間通信的簡單方法
方法
利用PyQt中的QThread類實(shí)現(xiàn)多線程利用,PyQt中的pyqtSignal類實(shí)現(xiàn)信息的觸發(fā)和捕獲,即定義事件和訂閱事件
利用QThread類實(shí)現(xiàn)多線程的方法
1,新建一個python類,繼承自QThread
from PyQt5.QtCore import QThread class SubThread(QThread):
2,重寫__init__(),__del__()和run()函數(shù)
from PyQt5.QtCore import QThread class SubThread(QThread): def __init__(self): super().__init__() # 以下加入需要的代碼 def __del__(self): self.wait() def run(self): # 以下加入子線程執(zhí)行的代碼
3,將繼承自QThread類實(shí)例化,然后調(diào)用實(shí)例對象的start()函數(shù),即可開啟新線程
【重點(diǎn)說明】
QThread的子類的實(shí)例,必須放在app = QtWidgets.QApplication(sys.argv)和sys.exit(app.exec_())代碼之間。
if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) subthread = SubThread() subthread.start() sys.exit(app.exec_())
利用pyqtSignal類實(shí)現(xiàn)信息觸發(fā)和捕獲的方法
1,在類內(nèi)頭部定義pyqtSignal屬性,記住,是類級別屬性
from PyQt5.QtCore import QThread, pyqtSignal class SubThread(QThread): messagetrigger = pyqtSignal(str) def __init__(self): super().__init__() # 以下加入需要的代碼 def __del__(self): self.wait() def run(self): # 以下加入子線程執(zhí)行的代碼
2,在需要觸發(fā)信息的地方使用,調(diào)用pyqtSignal的emit()函數(shù)觸發(fā)消息
import timefrom PyQt5.QtCore import QThread, pyqtSignal, QObject class SubThread(QThread): messagetrigger = pyqtSignal(str) def __init__(self): super().__init__() def __del__(self): self.wait() def run(self): self.messagetrigger.emit('子線程開始') time.sleep(2) self.messagetrigger.emit('子線程結(jié)束')
3,捕獲消息,使用pyqtSignal的connect()連接回調(diào)函數(shù),在回調(diào)函數(shù)內(nèi)處理捕獲到的信息,完整代碼如下:
import sysimport timefrom PyQt5.QtCore import QThread, pyqtSignal, QObject from PyQt5 import QtWidgets class SubThread(QThread): messagetrigger = pyqtSignal(str) def __init__(self): super().__init__() def __del__(self): self.wait() def run(self): self.messagetrigger.emit('子線程開始') time.sleep(2) self.messagetrigger.emit('子線程結(jié)束') def callback(msg): print(msg) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) subthread = SubThread() subthread.messagetrigger.connect(callback) subthread.start() sys.exit(app.exec_())
以上就是python實(shí)現(xiàn)多線程及線程間通信的簡單方法的詳細(xì)內(nèi)容,更多關(guān)于python多線程線程間通信的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python通過字典映射函數(shù)實(shí)現(xiàn)switch
這篇文章主要介紹了Python通過字典映射函數(shù)實(shí)現(xiàn)switch,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11Python playwright學(xué)習(xí)之自動錄制生成腳本
playwright 可以支持自動錄制生成腳本,也就是說只需要在頁面上點(diǎn)點(diǎn)點(diǎn),就可以自動生成對應(yīng)的腳本了。本文就來和大家詳細(xì)聊聊實(shí)現(xiàn)方法吧2023-02-02python錯誤提示:Errno?2]?No?such?file?or?directory的解決方法
我相信很多人在學(xué)習(xí)Python的時候,特別是在open文件的時候總還碰到,還報錯IOError:[Errno?2]沒有這樣的文件或目錄:'E://aaa.txt',這篇文章主要給大家介紹了關(guān)于python錯誤提示:Errno?2]?No?such?file?or?directory的解決方法,需要的朋友可以參考下2022-02-02Python基于Socket實(shí)現(xiàn)簡易多人聊天室的示例代碼
這篇文章主要介紹了Python基于Socket實(shí)現(xiàn)簡易多人聊天室的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python爬蟲小練習(xí)之爬取并分析騰訊視頻m3u8格式
讀萬卷書不如行萬里路,學(xué)的扎不扎實(shí)要通過實(shí)戰(zhàn)才能看出來,本篇文章手把手帶你爬下騰訊視頻的m3u8格式來分析,大家可以在過程中查缺補(bǔ)漏,看看自己掌握程度怎么樣2021-10-10