添加python线程在完成时报告的功能

添加python线程在完成时报告的功能,python,multithreading,logging,Python,Multithreading,Logging,我目前正在对python的threading.Thread类进行子类化,以便为其添加额外的日志功能。目前,我正试图让它报告线程何时启动,何时完成。报告线程已启动非常简单,因为我可以扩展start()函数。然而,报告退出更加困难。我试图扩展_bootstrap和_boothstrap_内部函数,在它们完成后添加日志记录,但是这似乎没有效果。我根本无法修改这些功能 有人知道一种方法来增加线程报告它已完成的能力吗?似乎您唯一的选择是要求用户覆盖其他方法,而不是运行。这样,您将在CustomThread

我目前正在对python的threading.Thread类进行子类化,以便为其添加额外的日志功能。目前,我正试图让它报告线程何时启动,何时完成。报告线程已启动非常简单,因为我可以扩展start()函数。然而,报告退出更加困难。我试图扩展_bootstrap和_boothstrap_内部函数,在它们完成后添加日志记录,但是这似乎没有效果。我根本无法修改这些功能


有人知道一种方法来增加线程报告它已完成的能力吗?

似乎您唯一的选择是要求用户覆盖其他方法,而不是运行
。这样,您将在
CustomThread
中运行
run
,在完成时调用其他方法并报告


这还有一个额外的好处:
start
函数非常重要,您可以在
run
开始时报告成功启动,而无需仔细处理被覆盖的
start

我通常使用
target
函数参数来调用
线程
构造函数,因此我会这样做:

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"

现在,你似乎习惯于使用<代码>线程< /代码>,通过重写它的代码> Run()/<代码>方法,但是这也许会有一些用处。

< P>如果你有很多异步线程,那么你应该考虑一个消息队列来进行内部通信吗?让线程将消息发布到exchange,然后退出。然后让调用线程决定何时轮询消息。不过这取决于你的工作量

这样做的好处是,如果以后需要,您可以使用多进程而不是多线程


我知道这个建议可能不是你想要的。

错误?你不能在run()的末尾添加通知代码吗?正如我所看到的,OP希望创建一个自定义的
线程
,稍后由其他人进行子类化。在我无法使用Thread.join()的情况下因为阻塞调用会导致系统的其他部分出现问题。正如@kirelagin所说的,我希望以后可以再进行子类化,因为我正在处理一个相当大的系统,而期望每个run()函数的末尾都添加日志记录是相当低效/无效的。哇,我完全忘记了这些参数。事实上,我们可以使用一个
\u target
函数来调用
self.run()
.Hrmm,是的,我们已经有一些相当大的对象正在子类化线程,所以我正在寻找一种更面向对象的方法来实现这一点。不过,用一种稍微非面向对象的方式来做这件事很有趣。他们说,面向对象代码更灵活、可重用,而且易于扩展。哦,好吧!会有用的,是的。。。但这使得人们期望没有人会覆盖run()函数。它只是设置了太多的潜在问题,让我无法使用这个解决方案。