私はPython2.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以降のバージョンをサポートする必要があることがわかりました。上記のコードでは、runが呼び出されますが、呼び出すとsuper(Worker, self).run()
、次のエラーが表示されます。
TypeError: threadTargMethod() argument after ** must be a dictionary
super
Python 2.4では別の方法で呼び出す必要がありますか?
解決策 次の方法でスレッドを開始する必要があります。
Worker(target=threadTargMethod, name="thread1", args=(), kwargs={}).start()
v2.7では、次の方法で開始しましたが、機能します
Worker(target=threadTargMethod, name="thread1").start()