0

我有一个结构如下的程序:

在此处输入图像描述

GUI是用 wxPython 制作的,位于主线程中。启动应用程序后,GUI 线程Thread1创建一个静态类Class1,该类创建一个Thread2.

Thread1 使用 与 GUI 对话wx.PostEvent,一切正常。我还需要 Thread1 与 Thread2 进行通信,所以我决定使用 pyPubSub 来实现。Thread2 需要在后台工作,因为它包含一些定期执行的操作,但它还包含my_func()Thread1 需要在某些事件上调用的函数(比方说)。我决定放入my_func()Thread2 是因为我不希望它停止 Thread1 的执行,但这正是发生的事情:在 Thread1 中,在我pub.sendMessage("events", message="Hello")用来触发的一些事件之后my_func();Thread2 的结构如下:

class Thread2(Thread)
    def __init__(self, parent):
        super().__init__()
        self.parent = parent
        pub.subscribe(self.my_func, "events")
    
    def run(self):
        while True:
        # do stuff
    
    def my_func(self, message):
        # do other stuff using the message
        # call parent functions

Thread2 的父级是 Class1,所以当我在 Class1 中创建线程时,我会:

self.t2 = Thread2(self)
self.t2.start()

为什么 Thread2 会停止 Thread1 的执行?

4

1 回答 1

0

换句话说,pypubsubsendMessage实际上是在调用您的侦听器函数,因此在继续之前等待它返回。如果此侦听器函数需要大量时间来运行,那么您获得的行为是明显的线程“阻塞”。

在这里,您可能希望以“非阻塞”方式“发送”轻量级消息以触发计算并在另一个地方“收听”结果。

于 2021-07-26T10:07:47.220 回答