我决定使用信号来指示线程的完成。如果仍然存在更多工作,我将信号连接到重新启动进程的代码。唉,连接到信号的代码永远不会触发。这让我很难过。
我需要知道为什么下面代码块中的方法“Tester”没有触发。
我是 python 新手,所以当我开始写这篇文章时,我研究了信号并根据tgray在此处发布的解决方案对代码进行了建模,显然我错过了一些重要的东西,但我真的看不到它是什么。
这是我的代码的大量简化版本:
from PyQt4.QtCore import *
import time
class Worker(QThread):
__pyqtSignals__ = ( "a",
"b" )
def __init__(self):
QThread.__init__(self, None)
def run(self):
print "'Worker.run' starts"
self.emit(SIGNAL("a"))
print "'Worker.run' ends"
class Main:
def Do(self):
print "'Do' starts"
self.Launch()
time.sleep(2)
print "'Do' ends"
def Launch(self):
print "'Launch' starts"
self.worker = Worker()
QObject.connect(self.worker, SIGNAL("a"), self.Tester)
self.worker.daemon = True
self.worker.start()
print "'Launch' ends"
def Tester(self):
print "Tester Fired!!"
m=Main()
跑步:
>>> m.Do()
产量:
'Do' starts
'Launch' starts
'Launch' ends
'Do' ends
'Worker.run' starts
'Worker.run' ends
但不是预期的:
Tester Fired!!
我错过了什么?此外,为什么“Worker.run”中的打印出现在其他所有内容之后,即使使用sleep(2)
?