我目前正在继承 python 的 threading.Thread 类,以便为其添加额外的日志记录功能。目前我正试图让它在线程启动和完成时都报告。报告线程已经启动很容易,因为我可以扩展 start() 函数。然而,报告退出更加困难。我尝试扩展 _bootstrap 和 _boothstrap_inner 函数以在完成后添加日志记录,但这似乎没有效果。我根本无法修改这些功能。
有谁知道添加线程报告它已经完成的能力的方法?
我目前正在继承 python 的 threading.Thread 类,以便为其添加额外的日志记录功能。目前我正试图让它在线程启动和完成时都报告。报告线程已经启动很容易,因为我可以扩展 start() 函数。然而,报告退出更加困难。我尝试扩展 _bootstrap 和 _boothstrap_inner 函数以在完成后添加日志记录,但这似乎没有效果。我根本无法修改这些功能。
有谁知道添加线程报告它已经完成的能力的方法?
我通常使用构造函数的target
函数参数Thread
,所以我会这样做:
class MyThread(Thread):
def __init__(self, target):
Thread.__init__(self, target=self._target, args=(target,))
def _target(self, target):
print "thread starting"
target()
print "thread ended"
现在,您似乎习惯于使用Thread
另一种方式,通过覆盖它的run()
方法,但也许这无论如何都会有一些用处。
似乎您唯一的选择是要求您的用户覆盖其他方法而不是run
. 这样你就可以run
在你的CustomThread
那调用其他方法并在完成时报告。
这有一个额外的好处:start
函数很重要,您将能够在开头报告成功启动,run
而不是仔细处理 overriden start
。
如果您有很多异步线程,也许您应该考虑使用消息队列来进行内部通信?让线程将消息发布到交换,然后退出。然后让调用线程决定何时轮询消息。有点取决于你的工作量。
这样做的好处是,如果您以后需要,您可以使用多进程而不是多线程。
我知道这个建议可能不是您想要的。