python将函数传递给线程

12 浏览
0 Comments

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但这并没有解决我想要做的事情。

0
0 Comments

在上述内容中,出现了一个问题:在使用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,)中添加逗号。这样,我们就可以成功地将函数作为参数传递给线程,实现多线程的并发执行。

0