Python 使用qtimer和qthread的逻辑中有任何缺陷吗?
我有一个使用pyqt4开发的GUI,它有一个运行按钮。单击run按钮时,我调用一个计时器和一个线程。计时器持续监视线程。在线程上,我调用一个命令提示符来执行测试用例。我希望线程在命令提示符打开之前一直处于活动状态,并希望在关闭命令提示符后将其表示为已死亡 我为实现这一点而编写的代码如下所示。有逻辑缺陷吗?或者有更好的方法来实现这一点Python 使用qtimer和qthread的逻辑中有任何缺陷吗?,python,multithreading,pyqt,pyqt4,Python,Multithreading,Pyqt,Pyqt4,我有一个使用pyqt4开发的GUI,它有一个运行按钮。单击run按钮时,我调用一个计时器和一个线程。计时器持续监视线程。在线程上,我调用一个命令提示符来执行测试用例。我希望线程在命令提示符打开之前一直处于活动状态,并希望在关闭命令提示符后将其表示为已死亡 我为实现这一点而编写的代码如下所示。有逻辑缺陷吗?或者有更好的方法来实现这一点 self.connect(self.run_button, SIGNAL('clicked()'), self.runscript) def runscript
self.connect(self.run_button, SIGNAL('clicked()'), self.runscript)
def runscript(self):
self.timer = QTimer()
self.timer.connect(self.timer, SIGNAL("timeout()"),self.sendData)
self.timer.start(1000)
def sendData(self):
if self.run_timer:
run_monitor_object = RunMonitor()
print 'Starting the thread...........'
run_monitor_object.start()
self.run_timer = False
if run_monitor_object.isAlive():
print 'Thread Alive...'
else:
print 'Thread is Dead....'
class RunMonitor(threading.Thread):
def __init__(self, parent=None):
threading.Thread.__init__(self)
def run(self):
print 'Invoking Command Prompt..........'
subprocess.call(["start", "/DC:\\Scripts", "scripts_to_execute.bat"], shell=True)
当我运行此程序时,我得到以下错误
UnboundLocalError:if run\u monitor\u object.isAlive()赋值前引用的局部变量“run\u monitor\u object”:
只是想知道还有什么办法,我可以以下代码:
if self.run_timer:
run_monitor_object = RunMonitor()
print 'Starting the thread...........'
run_monitor_object.start()
self.run_timer = False
if run_monitor_object.isAlive():
print 'Thread Alive...'
else:
print 'Thread is Dead....'
错误了。如果没有执行第一个分支(当self.run\u timer
已为True时,可能在第二次调用中),则不会分配run\u monitor\u对象
,并且您尝试在第二个If
中使用它
要实现此功能,请将run\u monitor\u thread
设置为类的实例变量
还有,为什么要启动计时器中的线程?这不必要地使你的逻辑复杂化了。创建计时器时启动它。计时器将用于监视它。如果使用QThread而不是标准Python线程,则可以将函数连接到其finished()信号。然后,您可以在被调用的函数中运行代码,而不是使用计时器检查线程状态。