Python 如何为计时器线程命名?
我使用一个循环的python计时器线程,并想给它起个名字。目前,python为每个新线程命名为Python 如何为计时器线程命名?,python,timer,python-multithreading,Python,Timer,Python Multithreading,我使用一个循环的python计时器线程,并想给它起个名字。目前,python为每个新线程命名为thread-,并在每次新的计时器启动时递增该数字。我希望名称保持不变。基本Thread类支持命名为Timers,但不支持: class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None) 注意name=None属性,该属性在计时器
thread-
,并在每次新的计时器启动时递增该数字。我希望名称保持不变。基本Thread
类支持命名为Timer
s,但不支持:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *,
daemon=None)
注意name=None
属性,该属性在计时器中不存在
class threading.Timer(interval, function, args=None, kwargs=None)
关于如何给计时器起个名字有什么想法吗?我想我可以派生我自己的Timer
类并添加name
,但我不认为python解释器会将其作为线程的名称…Timer
是一个thread
子类,它有名称,因此,您可以在创建自定义名称后,通过只为其name
属性指定一个值来为其指定一个自定义名称,因此Timer
构造函数不接受允许此操作的参数并不重要
如果您经常这样做,您可以编写一个相对简单的实用程序函数来自动执行此操作(或者派生您自己的NamedTimer(Timer)
子类,其代码行数大致相同):
试试看:
从线程导入计时器
除恐怖外:
从线程导入_timeras Timer#Python Timer.name:'Fidgit'
timer.run()#会在几秒钟后打印“func()called”。
计时器
是一个线程
子类,它有名称,因此您可以在创建一个自定义名称后,只需为其名称
属性指定一个值即可,因此计时器
构造函数不接受允许此操作的参数并不重要
如果您经常这样做,您可以编写一个相对简单的实用程序函数来自动执行此操作(或者派生您自己的NamedTimer(Timer)
子类,其代码行数大致相同):
试试看:
从线程导入计时器
除恐怖外:
从线程导入_timeras Timer#Python Timer.name:'Fidgit'
timer.run()#会在几秒钟后打印“func()called”。
我寻找了同样的信息,并在这里登陆。我发现这样做的一种方法是:
timer = Timer(interval, function)
timer.setName('AnyTimerName')
我寻找了同样的信息,并在这里着陆。我发现这样做的一种方法是:
timer = Timer(interval, function)
timer.setName('AnyTimerName')
类threading.\u Timer
是从Thread
派生的。如果您查看源代码,就会发现定义自己的子类是多么容易,它与基类一样具有name
属性。i、 e.调用Thread.\uuuuu init\uuuuu(self,name=xxx)
在subcass的\uuuu init\uuuuu()方法中。是的,谢谢,这很有意义。再次,从中的源代码开始,线程
类本身中的名称
是一个在内部访问私有属性self的属性。因此,您可以通过属性的@name.setter
方法来操作其值(甚至可以直接操作,尽管这破坏了封装)在实例化计时器之后,或者从您自己的子类中实例化对象。无需重载_Timer类:我只需使用其父属性'name'Timer将所需的指示符分配给计时器。name=my_name起作用,在父类文档中甚至声明使用它-中断封装,但在这种情况下,这似乎没问题。命名仅用于标识目的的字符串。它没有语义。可以为多个线程指定相同的名称。初始名称由构造函数设置。您误解了我的意思。使用(继承的)name
属性很好-访问私有的\uu name
属性会破坏封装。无论如何,很高兴听到你的问题解决了。Classthreading.\u Timer
是从Thread
派生出来的。如果您查看源代码,就会发现定义自己的子类是多么容易,它与基类一样具有name
属性。i、 e.调用Thread.\uuuuu init\uuuuu(self,name=xxx)
在subcass的\uuuu init\uuuuu()方法中。是的,谢谢,这很有意义。再次,从中的源代码开始,线程
类本身中的名称
是一个在内部访问私有属性self的属性。因此,您可以通过属性的@name.setter
方法来操作其值(甚至可以直接操作,尽管这破坏了封装)在实例化计时器之后,或者从您自己的子类中实例化对象。无需重载_Timer类:我只需使用其父属性'name'Timer将所需的指示符分配给计时器。name=my_name起作用,在父类文档中甚至声明使用它-中断封装,但在这种情况下,这似乎没问题。命名仅用于标识目的的字符串。它没有语义。可以为多个线程指定相同的名称。初始名称由构造函数设置。您误解了我的意思。使用(继承的)name
属性很好-访问私有的\uu name
属性会破坏封装。不管怎样,很高兴听到你的问题解决了。