gpt4 book ai didi

python : Passing function as parameter and multithreading

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:40 25 4
gpt4 key购买 nike

我是 python 的新手,我找不到为什么“Without_thread”类有效而“With_thread”类无效。

我的“With_thread”类的目的是在我用一个函数调用它时启动一个新线程,这样我就可以同时执行任何函数。 (<==这就是我想做的)

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

如果您能帮助我,我将不胜感激,非常感谢您抽出宝贵时间!!!

最佳答案

怀疑问题是由您的 _target 和 _args 以及 Thread 中定义的相同属性之间的某种冲突引起的。

你不需要在With_thread中定义__init__()run()。 Thread 类自己的 init 允许您传递关键字参数 targetargs,它的 run() 方法将使用初始化时提供的 args 和 kwargs 运行目标。

因此,您可以完全摆脱 With_thread,然后调用:

f1 = threading.Thread(target=some_Func, args=([1,2], 6))

关于 python : Passing function as parameter and multithreading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24907633/

25 4 0