Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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线程_Python_Multithreading - Fatal编程技术网

无法启动新的python线程

无法启动新的python线程,python,multithreading,Python,Multithreading,我有以下python代码。我想在按下按钮后开始新线程,因为我想用主线程做一些其他的事情。但在当前代码中,当从pycharm并发图中检查时,我似乎并没有创建新线程。我只能在按下按钮时启动新线程。按下按钮后,程序也不会响应。请帮忙 from PyQt4 import QtCore, QtGui import sys import subprocess import re import threading sys.settrace try: _fromUtf8 = QtCore.QStr

我有以下python代码。我想在按下按钮后开始新线程,因为我想用主线程做一些其他的事情。但在当前代码中,当从pycharm并发图中检查时,我似乎并没有创建新线程。我只能在按下按钮时启动新线程。按下按钮后,程序也不会响应。请帮忙

from PyQt4 import QtCore, QtGui
import sys
import subprocess
import re
import threading


sys.settrace

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8

    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)


class GuiMainWindow(QtGui.QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(420, 280)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.buttonTrans = QtGui.QPushButton(self.centralwidget)
        self.buttonTrans.setGeometry(QtCore.QRect(50, 110, 131, 51))
        self.buttonTrans.setObjectName(_fromUtf8("buttonTrans"))
        self.label = QtGui.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(70, 60, 281, 21))
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        print(self)

    def retranslateUi(self, MainWindow):
        self.buttonTrans.setText(_translate("MainWindow", "Start", None))
        self.connect(self.buttonTrans, QtCore.SIGNAL('clicked()'), self.setup_video)

    def setup_video(self):
        print("Setting up VIDEO")
        t = threading.Thread(target=self.logging_thread()).start()

    def logging_thread(self):
        cmd33 = "ping www.google.com"
        cmd3process = subprocess.Popen(cmd33.split(), stdout=subprocess.PIPE, shell=True)
        import time
        while True:
            output3 = cmd3process.stdout.readline()
            time.sleep(1)
            if output3 == '' and cmd3process.poll() != None:
                break
            print(output3.decode("utf-8"))

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = GuiMainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

最有可能的是,线程中发生了异常。要识别并修复它,请尝试以下操作:

def logging_thread(self):
    try:
        cmd33 = "ping www.google.com"
        cmd3process = subprocess.Popen(cmd33.split(), stdout=subprocess.PIPE, shell=True)
        import time
        while True:
            output3 = cmd3process.stdout.readline()
            time.sleep(1)
            if output3 == '' and cmd3process.poll() != None:
                break
            print(output3.decode("utf-8"))
    except:
        import traceback
        traceback.print_exc
确定错误原因后,您有两种选择:

  • 如果错误是您所做的(例如,输入错误的属性),请删除
    try…块,但整个
    块除外
  • 如果代码中存在合法发生的条件,请保留该块,但使异常类型特定。例如
    除了ValueError:
    。此外,在这种情况下,还要改进实际的处理程序

  • 最有可能的是,线程中发生了异常。要识别并修复它,请尝试以下操作:

    def logging_thread(self):
        try:
            cmd33 = "ping www.google.com"
            cmd3process = subprocess.Popen(cmd33.split(), stdout=subprocess.PIPE, shell=True)
            import time
            while True:
                output3 = cmd3process.stdout.readline()
                time.sleep(1)
                if output3 == '' and cmd3process.poll() != None:
                    break
                print(output3.decode("utf-8"))
        except:
            import traceback
            traceback.print_exc
    
    确定错误原因后,您有两种选择:

  • 如果错误是您所做的(例如,输入错误的属性),请删除
    try…块,但整个
    块除外
  • 如果代码中存在合法发生的条件,请保留该块,但使异常类型特定。例如
    除了ValueError:
    。此外,在这种情况下,还要改进实际的处理程序

  • 调用该方法,而不是将其作为参数传递给新的
    线程

    t = threading.Thread(target=self.logging_thread()).start()
    
    将其更改为:

    t = threading.Thread(target=self.logging_thread).start()
    

    调用该方法,而不是将其作为参数传递给新的
    线程

    t = threading.Thread(target=self.logging_thread()).start()
    
    将其更改为:

    t = threading.Thread(target=self.logging_thread).start()
    

    你怎么知道它不会创建新线程呢?因为当我在pycharm并发中运行代码时,我只能看到主线程。按下按钮后,我看不到新的线程。把这个问题放在你的问题上,我将撤回我的投票。是的。python程序变得没有响应它打印什么?它会打印“设置视频”吗?你怎么知道它不会创建新线程?因为当我在pycharm并发中运行代码时,我只能看到主线程。按下按钮后,我看不到新的线程。把这个问题放在你的问题上,我将撤回我的投票。是的。python程序变得没有响应它打印什么?它是否打印“设置视频”?我按照您的建议添加了“尝试除块”。但我仍然看不到任何控制台异常。程序仍然没有响应。请帮助我按照您的建议添加“尝试除块”。但我仍然看不到任何控制台异常。程序仍然没有响应。请help@Main这绝对是个问题。再加上我的建议,看看会不会发生什么。这是个问题。@Main这绝对是个问题。再加上我的建议,看看会不会发生什么。这一直是个问题。