0

我目前正在继承 python 的 threading.Thread 类,以便为其添加额外的日志记录功能。目前我正试图让它在线程启动和完成时都报告。报告线程已经启动很容易,因为我可以扩展 start() 函数。然而,报告退出更加困难。我尝试扩展 _bootstrap 和 _boothstrap_inner 函数以在完成后添加日志记录,但这似乎没有效果。我根本无法修改这些功能。

有谁知道添加线程报告它已经完成的能力的方法?

4

3 回答 3

1

我通常使用构造函数的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()方法,但也许这无论如何都会有一些用处。

于 2013-06-05T13:56:24.450 回答
0

似乎您唯一的选择是要求您的用户覆盖其他方法而不是run. 这样你就可以run在你的CustomThread那调用其他方法并在完成时报告。

这有一个额外的好处:start函数很重要,您将能够在开头报告成功启动,run而不是仔细处理 overriden start

于 2013-06-05T13:31:11.427 回答
0

如果您有很多异步线程,也许您应该考虑使用消息队列来进行内部通信?让线程将消息发布到交换,然后退出。然后让调用线程决定何时轮询消息。有点取决于你的工作量。

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

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

于 2013-06-05T15:01:54.577 回答