python - 如何使用python启动两个线程?

标签 python multithreading python-2.7 3d leap-motion

我有 3 个 python 文件:

  1. 文件包含许多使用 pyQt 初始化 Frame 和其他 GUI 的类方法。

  2. 包含从 Leap Motion 读取数据的 Leap Motion Listener 类的文件。

  3. 用于启动其他类的主文件。

现在我想一起启动 GUI 框架和 Leap Motion 类。我尝试在主类中启动两个线程,但有很多问题。

此代码仅适用于运行 pyQt 框架:

import sys
from PyQt4 import QtCore, QtGui
from Painter import GUI_animate

class StartQT4(QtGui.QMainWindow):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = GUI_animate()
        self.ui.setupUi(self)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())

这就是我尝试运行 pyQt 框架和 Leap Motion 类的方法:

import sys
from PyQt4 import QtCore, QtGui
from Painter import GUI_animate
import LeapMotion
from threading import Thread


class StartQT4(QtGui.QMainWindow):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        t1 = Thread(target=show_frame())
        t2 = Thread(target=start_LeapMotion())
        t1.start()
        t2.start()
        self.ui.setupUi(self)

def start_LeapMotion():
    LeapMotion.main()

def show_frame():
    StartQT4.ui = GUI_animate()


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())

但只有Leap Motion类运行,读完Leap Motion后,帧显示!

我怎样才能将它们一起运行?

最佳答案

不要将成对的括号放在show_frame之后和start_LeapMotion当您将它们指定为 target 时线程的。 Python解释functionName作为引用 <function functionName at (memory location)> 的变量,而functionName()是对该函数的调用。当您指定线程的target时,您不想想要传递对该函数的调用;你想传递函数本身。正如 API for the threading module 中所述, t1.start()调用Thread对象的run()方法,除非您重写它,否则“调用作为 target 参数传递给对象构造函数的可调用对象” - 请注意 target参数应该接收一个可调用对象(即函数本身,因此没有括号),而不是一个调用(这就是您当前传递的内容)。

关于python - 如何使用python启动两个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30274323/

相关文章:

python - 使用 os.walk() 时如何排除目录?其他方法没有效果

python - 创建一个程序,如果按字典顺序输入三个单词则打印 true

python - 获取字符串中字符串的特定值

python - python2 和 python3 的兼容 python 文字

java - JSR-133 说明书如何强制执行 Java 内存模型做出的所有保证

ios - 核心数据(魔术记录)在提取时暂停主线程

c# - 在关闭主窗体之前关闭侧线程

python-2.7 - 通过 IPython 笔记本运行时,python 日志默认存储在哪里?

Python:不同类型的多维数组

google-app-engine - 在 Google App Engine 中存储多种语言的内容的合适设计是什么?