python實(shí)現(xiàn)多線程及線程間通信的簡(jiǎn)單方法
方法
利用PyQt中的QThread類實(shí)現(xiàn)多線程利用,PyQt中的pyqtSignal類實(shí)現(xiàn)信息的觸發(fā)和捕獲,即定義事件和訂閱事件
利用QThread類實(shí)現(xiàn)多線程的方法
1,新建一個(gè)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í)例對(duì)象的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屬性,記住,是類級(jí)別屬性
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)多線程及線程間通信的簡(jiǎn)單方法的詳細(xì)內(nèi)容,更多關(guān)于python多線程線程間通信的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python?OpenCV?Canny邊緣檢測(cè)算法的原理實(shí)現(xiàn)詳解
這篇文章主要介紹了Python?OpenCV?Canny邊緣檢測(cè)算法的原理實(shí)現(xiàn)詳解,由于邊緣檢測(cè)對(duì)噪聲敏感,因此對(duì)圖像應(yīng)用高斯平滑以幫助減少噪聲,具體詳情需要的小伙伴可以參考一下2022-07-07
Python-Tkinter Text輸入內(nèi)容在界面顯示的實(shí)例
今天小編就為大家分享一篇Python-Tkinter Text輸入內(nèi)容在界面顯示的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python HTTP庫 requests 的簡(jiǎn)單使用詳情
requests是Python的一個(gè)HTTP客戶端庫,基于urllib標(biāo)準(zhǔn)庫,在urllib標(biāo)準(zhǔn)庫的基礎(chǔ)上做了高度封裝,因此更加簡(jiǎn)潔好用,下面就由小編來給大家詳細(xì)介紹吧,需要的朋友可以參考下2021-09-09
Python?async+request與async+aiohttp實(shí)現(xiàn)異步網(wǎng)絡(luò)請(qǐng)求探索
這篇文章主要介紹了Python?async+request與async+aiohttp實(shí)現(xiàn)異步網(wǎng)絡(luò)請(qǐng)求探索,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10

