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