我有以下代码可以正常使用python 2.7 +
class Worker(threading.Thread):
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None, onCompleteCb=None):
self.__onCompleteCb = onCompleteCb
self.__name = name
super(Worker, self).__init__(group, target, name, args, kwargs, verbose)
def getName(self):
return self.__name
def run(self):
try:
super(Worker, self).run()
if self.__onCompleteCb is not None: self.__onCompleteCb(self.__name)
except Exception, e:
if self.__onCompleteCb is not None: self.__onCompleteCb(self.__name, failed=True, exception=e)
但是我最近发现我的代码应该支持从2.4开始的版本:在上面的代码中,运行被调用但是当它调用super(Worker, self).run()
时,我看到以下错误
TypeError: threadTargMethod() argument after ** must be a dictionary
我应该在python 2.4中以不同方式调用super
吗?
解决方案 我必须以下列方式启动该线程:
Worker(target=threadTargMethod, name="thread1", args=(), kwargs={}).start()
在v2.7中,我开始以下方式运行
Worker(target=threadTargMethod, name="thread1").start()
答案 0 :(得分:1)
我建议您将代码更改为:
class Worker(threading.Thread):
def __init__(self, group=None, target=None, name=None,
args=(), kwargs={}, verbose=None, onCompleteCb=None):
...
super(Worker, self).__init__(group=group, target=target, name=name,
args=args, kwargs=kwargs)
换句话说:
将kwargs
的默认值设为空dict(与文档相匹配 - 您似乎很幸运获得2.7)
不要包含verbose
参数(2.4或2.7不支持 - 不知道那里发生了什么)
明确名称
通过此更改,您可以继续
开始Worker(target=threadTargMethod, name="thread1").start()
因为kwargs
默认设置正确。