【发布时间】:2021-06-29 07:52:48
【问题描述】:
我有一个结构如下的程序:
GUI 是用 wxPython 制作的,位于主线程中。启动应用程序后,GUI线程创建Thread1,它创建一个静态类Class1,它创建Thread2。
Thread1 使用wx.PostEvent 与 GUI 对话,一切正常。我还需要 Thread1 与 Thread2 进行通信,所以我决定使用 pyPubSub 来实现。 Thread2 需要在后台工作,因为它包含一些定期执行的操作,但它还包含 Thread1 需要在某些事件上调用的函数(比如说my_func())。我决定将 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 的执行?
【问题讨论】:
-
在不知道你的线程/函数的细节的情况下,thread1 正在执行一个函数并且需要它完成,然后再继续。所以,没关系
where这个功能,还是要等它完成。除非您知道不同,否则我们需要更多细节。 -
@RolfofSaxony 事件不应该允许在不等待的情况下继续吗?如果不是这样,我可以简单地从 Thread1 调用
t2.my_func() -
a function (let's say my_func()) that Thread1 needs to call on certain events.该引文中的关键词是call。如果这不是你的意思,那么我们需要更多细节。这是什么功能,有什么作用?上下文!
标签: python python-3.x multithreading wxpython pypubsub