如何给 Timer 线程命名?

Bli*_*ddy 2 python timer python-multithreading

我使用一个循环的 python 计时器线程,并想给它一个名称。目前,Python 为每个新线程提供名称Thread-<number>,并在每个新计时器启动时递增编号。我希望名称保持不变。基本Thread类支持命名,Timer但不支持:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *,
                       daemon=None)
Run Code Online (Sandbox Code Playgroud)

请注意name=None属性,该属性在Timer.

class threading.Timer(interval, function, args=None, kwargs=None)
Run Code Online (Sandbox Code Playgroud)

关于如何命名有什么想法吗Timer?我想我可以派生我自己的Timer类并添加name,但我不认为python解释器会将它作为线程的名称......

mar*_*eau 6

Timers是一个子类,它有名称,因此您可以在创建子类Thread为其分配一个自定义名称,只需为其属性分配一个值\xe2\x80\x94,因此构造函数不接受允许这样做的参数并不重要。nameTimer

\n

如果您经常这样做,您可以编写一个相对简单的实用函数来自动为您执行此操作(或派生您自己的NamedTimer(Timer)子类,这将是大约相同数量的代码行):

\n
try:\n    from threading import Timer\nexcept ImportError:\n    from threading import _Timer as Timer  # Python <3.3\n\ndef named_timer(name, interval, function, *args, **kwargs):\n    """Factory function to create named Timer objects.\n\n      Named timers call a function after a specified number of seconds:\n\n          t = named_timer('Name', 30.0, function)\n          t.start()\n          t.cancel()  # stop the timer's action if it's still waiting\n    """\n    timer = Timer(interval, function, *args, **kwargs)\n    timer.name = name\n    return timer\n\nif __name__ == '__main__':\n\n    def func():\n        print('func() called')\n\n    timer = named_timer('Fidgit', 3, func)\n    print('timer.name: {!r}'.format(timer.name))  # -> timer.name: 'Fidgit'\n    timer.run()  # Causes "func() called" to be printed after a few seconds.\n
Run Code Online (Sandbox Code Playgroud)\n