Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用qtimer和qthread的逻辑中有任何缺陷吗?_Python_Multithreading_Pyqt_Pyqt4 - Fatal编程技术网

Python 使用qtimer和qthread的逻辑中有任何缺陷吗?

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

我有一个使用pyqt4开发的GUI,它有一个运行按钮。单击run按钮时,我调用一个计时器和一个线程。计时器持续监视线程。在线程上,我调用一个命令提示符来执行测试用例。我希望线程在命令提示符打开之前一直处于活动状态,并希望在关闭命令提示符后将其表示为已死亡

我为实现这一点而编写的代码如下所示。有逻辑缺陷吗?或者有更好的方法来实现这一点

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()信号。然后,您可以在被调用的函数中运行代码,而不是使用计时器检查线程状态。