python将函数传递给线程
python将函数传递给线程
如何将一个函数像标准变量一样传递给线程是可能的吗?\n当我将函数作为参数传递时,出现了一个不可迭代的错误。\n以下是我的代码摘要:\n
from CallbackThread import CallbackThread import time import threading class foo: def runSomthing(self, callback): # 做一些事情 callthread = threading.Thread(target=self.newthread, args=(callback,)) callthread.start() def newthread(self, callback): print("运行中") while True: # 如果收到数据(udp) data = 0 # 运行mycallbacktest callback(data) def mycallbacktest(i): print("你好,世界", i) myobj = foo() myobj.runSomthing(mycallbacktest)
\n我在类似的主题中看到了一些类似的东西,像这样的:\nhttps://gist.github.com/amirasaran/e91c7253c03518b8f7b7955df0e954bb\n我试过了这个,但我不确定这个在做什么,对我来说只是在线程完成后调用一个回调。\n
class BaseThread(threading.Thread): def __init__(self, callback=None, callback_args=None, *args, **kwargs): target = kwargs.pop('target') super(BaseThread, self).__init__(target=self.target_with_callback, *args, **kwargs) self.callback = callback self.method = target self.callback_args = callback_args def target_with_callback(self): self.method() if self.callback is not None: self.callback(*self.callback_args)
\n但这并没有解决我想要做的事情。
在上述内容中,出现了一个问题:在使用Python传递函数给线程时,缺少了一个逗号,导致出现错误。正确的做法是在args=(callback,)中添加逗号。
解决方法如下:
# 导入线程模块 import threading # 定义一个函数 def callback(): print("Hello, World!") # 创建线程 t = threading.Thread(target=callback) # 启动线程 t.start()
通过以上代码,我们可以看出,在创建线程时,我们将要执行的函数`callback`作为参数传递给了`threading.Thread`的`target`参数。这样,当线程启动时,会执行该函数。
然而,在上述问题中,我们忽略了一个重要的细节,即在args=(callback,)中缺少了一个逗号。这个逗号的作用是将`callback`函数转换为一个元组,以便将其作为参数传递给线程。
因此,正确的做法是将args=(callback)修改为args=(callback,),以确保传递的是一个元组。
总结起来,出现这个问题的原因是在传递函数给线程时缺少了一个逗号,解决方法是在args=(callback,)中添加逗号。这样,我们就可以成功地将函数作为参数传递给线程,实现多线程的并发执行。