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解释器会将它作为线程的名称......
Timers
是一个子类,它有名称,因此您可以在创建子类后Thread
为其分配一个自定义名称,只需为其属性分配一个值\xe2\x80\x94,因此构造函数不接受允许这样做的参数并不重要。name
Timer
如果您经常这样做,您可以编写一个相对简单的实用函数来自动为您执行此操作(或派生您自己的NamedTimer(Timer)
子类,这将是大约相同数量的代码行):
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
归档时间: |
|
查看次数: |
5137 次 |
最近记录: |