【发布时间】:2020-11-17 22:24:58
【问题描述】:
我正在尝试创建一个具有 Main 类(具有永久计数方法和从 Worker 类方法接收的永久发射信号)和 Worker 类(正在计数并永久发射到 Main 类)的程序
我是编程新手所以我不知道异步或并行程序但我必须使用信号/插槽这就是我决定使用pyqt的原因
当我使用 QThread 时它阻塞了 main_cnt()
class Worker(QThread):
tr_pass = pyqtSignal(int)
def __init__(self):
super().__init__()
def run(self):
cnt = 0
while True:
cnt += 1
print("Worker cnt : ", cnt)
self.tr_pass.emit(cnt)
time.sleep(2)
class Main:
def __init__(self):
self.worker = Worker()
self.worker.tr_pass.connect(self.worker_connect)
self.worker.run()
self.main_cnt()
def main_cnt(self):
cnt = 0
while True:
cnt += 1
print("main cnt : ", cnt)
time.sleep(3)
def worker_connect(self, df):
print("Connected by Worker : ", df)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
app.exec_()
所以我使用了 moveToThread 异步工作但是效果不好
终端指示这样,'self.worker_.tr_pass.connect(self.worker_connect)' 不起作用
- 主要数量:1
- 工人数量:1
- 工人数量:1
- 工人数量:2
- 主要数量:2
- 工人数量:3
- 工人 cnt : 4main cnt : 3
- 工人数量:5
- 主要数量:4
- 主要数量:4
- 工人数量:6
class Worker_(QObject):
tr_pass = pyqtSignal(int)
def __init__(self):
super().__init__()
def run(self):
cnt = 0
while True:
cnt += 1
print("Worker cnt : ", cnt)
self.tr_pass.emit(cnt)
time.sleep(2)
class Main:
def __init__(self):
self.worker_ = Worker_()
self.thread = QThread()
self.worker_.moveToThread(self.thread)
self.thread.started.connect(self.worker_.run)
self.worker_.tr_pass.connect(self.worker_connect)
self.thread.start()
self.main_cnt()
def main_cnt(self):
cnt = 0
while True:
cnt += 1
print("main cnt : ", cnt)
time.sleep(3)
def worker_connect(self, df):
print("Connected by Worker : ", df)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
app.exec_()
我该如何解决这个问题 谢谢你的回答
【问题讨论】:
标签: python multithreading pyqt qthread