我是python的新手,我无法找到为什么" Without_thread"班级工作,而不是" With_thread"类。
我和#34; With_thread"的目的class是在用函数调用它时启动一个新线程,所以我可以同时执行任何函数。 (< ==这就是我想做的事)
import threading
class With_thread(threading.Thread):
def __init__(self, target, *args):
self._target = target
self._args = args
threading.Thread.__init__(self)
def run(self):
self._target(*self._args)
" Without_thread"几乎是同一个班级,这里唯一改变的是我不会使用线程。
class Without_thread():
def __init__(self, target, *args):
self._target = target
self._args = args
def foo(self):
self._target(*self._args)
我用这个来测试我的代码:
def some_Func(data, key):
print("some_Func was called : data=%s; key=%s" % (str(data), str(key)))
f1 = With_thread(some_Func, [1,2], 6)
f1.start()
f1.join()
f2 = Without_thread(some_Func, [1,2], 6)
f2.foo()
f1的输出是:
self._target(*self._args)
TypeError: 'NoneType' object is not callable
f2的输出是:
some_Func was called : data=[1, 2]; key=6
如果你能帮助我,我真的很感激,非常感谢你的时间!
答案 0 :(得分:2)
我怀疑这个问题是由_target和_args之间的某种冲突以及Thread中定义的相同属性引起的。
您无需在With_thread中定义__init__()
或run()
。 Thread类拥有 init 允许您传递关键字参数target
和args
,其run()
方法将使用在intiialisation提供的args和kwargs运行目标。 / p>
所以,你可以完全摆脱With_thread,然后调用:
f1 = threading.Thread(target=some_Func, args=([1,2], 6))