同时运行两个QThreads

时间:2017-04-28 05:09:12

标签: python multithreading qt pyqt

我的任务目标是允许按一个按钮启动两个进程,两个进程同时在不同的QThreads上运行。

我的代码结构如下(简化)

class Main_Window():

    # My UI stuff goes here

class worker1(QtCore.QObject):
    def __init__(self):
        ...

    def run1():
        ...

class worker2(QtCore.QObject):
    def __init__(self):
        ...

    def run2():
        ...

app = QtGui.QApplication(sys.argv)
myapp = Main_Window()

thr1 = QtCore.QThread()
thr2 = QtCore.QThread()

work1 = worker1()
work2 = worker2()

work1.moveToThread(thr1)
work2.moveToThread(thr2)

# I have a signal coming in from main thread
app.connect(myapp, QtCore.SIGNAL('start1'), work1.run1())
app.connect(myapp, QtCore.SIGNAL('start1'), work2.run2())

thr1.start()
thr2.start()

如果我想设置两个Qthreads,这种QThread编码是不正确的吗?

我得到了一个"分段错误"当我尝试启动程序时,但是当我第二次使用app.connect时,它运行正常。

我想知道是否有人能告诉我哪里出错了。

谢谢!

1 个答案:

答案 0 :(得分:0)

当您使用以下信号连接信号时

app.connect(myapp, QtCore.SIGNAL('start1'), work1.run1())

您实际上正在执行运行功能,而不仅仅是连接它。你想省略"()"或者python执行该函数并尝试连接它返回的任何内容。

修改

另外两条建议回应你的评论说你拿出了"()"。 首先,我从未见过有人在使用QtThread类时重命名run函数,你可能想尝试相同的代码,其中run1和run2实际上只是命名为" run"。查看此主题以获得一些好的示例: How to use QThread correctly in pyqt with moveToThread()?

其次,您可以发布实际错误吗?它喜欢这个帖子中的那个: Is this PyQt 4 python bug or wrongly behaving code?