gpt4 book ai didi

python - 如何在 Python 中传递和运行回调方法

转载 作者:IT老高 更新时间:2023-10-28 20:21:47 35 4
gpt4 key购买 nike

我有一个管理器(主线程),它创建其他线程来处理各种操作。我希望我的经理在它创建的线程结束时得到通知(当 run() 方法执行完成时)。

我知道我可以通过使用 Thread.isActive() 方法检查所有线程的状态来做到这一点,但是轮询很糟糕,所以我想要通知。

我正在考虑给线程一个回调方法,并在 run() 方法的末尾调用这个函数:

class Manager():
...
MyThread(self.on_thread_finished).start() # How do I pass the callback

def on_thread_finished(self, data):
pass
...

class MyThread(Thread):
...
def run(self):
....
self.callback(data) # How do I call the callback?
...

谢谢!

最佳答案

线程不能调用管理器,除非它有对管理器的引用。发生这种情况的最简单方法是让管理器在实例化时将其提供给线程。

class Manager(object):
def new_thread(self):
return MyThread(parent=self)
def on_thread_finished(self, thread, data):
print thread, data

class MyThread(Thread):

def __init__(self, parent=None):
self.parent = parent
super(MyThread, self).__init__()

def run(self):
# ...
self.parent and self.parent.on_thread_finished(self, 42)

mgr = Manager()
thread = mgr.new_thread()
thread.start()

如果您希望能够将任意函数或方法分配为回调,而不是存储对管理器对象的引用,这会因为方法包装器等而变得有点问题。很难设计回调,因此它会同时获得对管理器 线程的引用,这正是您想要的。我为此研究了一段时间,但没有提出任何我认为有用或优雅的东西。

关于python - 如何在 Python 中传递和运行回调方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800984/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com