上面已经由@Blender给出了解决方案。在
但是对这个类Thread constructor做一点解释。在
在线程模块中,类Thread不使用任何*参数和**kwargsclass threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
在上面的代码片段中,args只是一个默认值为空元组的参数,kwargs是另一个默认值为空字典的参数。这与
像def foo(*args, **kwargs)这样的函数,如果要传递元组参数,请使用args,如果要传递字典参数,请使用kwargs。在
所以,如果你创建一个像下面这样的对象,运行时不会出现任何错误,但这是错误的。在
^{pr2}$
源代码:请检查args和kwargs行,那里没有解包。在def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None):
assert group is None, "group argument must be None for now"
_Verbose.__init__(self, verbose)
if kwargs is None:
kwargs = {}
self.__target = target
self.__name = str(name or _newname())
self.__args = args
self.__kwargs = kwargs
self.__daemonic = self._set_daemon()
self.__ident = None
self.__started = Event()
self.__stopped = False
self.__block = Condition(Lock())
self.__initialized = True
# sys.stderr is not stored in the class like
# sys.exc_info since it can be changed between instances
self.__stderr = _sys.stderr
如果你不喜欢这个答案,请在评论中告诉我,我会删除它。在
谢谢