python 将函数传递给线程
python passing function to thread
如何像标准变量一样将函数传递给线程,
当我在 args 上传递函数时,我有一个不可迭代的错误
有我的代码摘要
from CallbackThread import CallbackThread
import time
import threading
class foo:
def runSomthing(self,callback):
#do things
callthread = threading.Thread(target=self.newthread, args=(callback))
callthread.start()
def newthread(self,calback):
print("runiing")
while True:
#if receve data (udp)
data = 0
#run mycallbacktest
calback(data)
def mycallbacktest(i):
print("hello world", i)
myobj = foo()
myobj.runSomthing(mycallbacktest)
我在类似的主题上看到过类似的东西
https://gist.github.com/amirasaran/e91c7253c03518b8f7b7955df0e954bb
并且我已经基于此进行了尝试,但我不确定这是在做什么,对我来说只是在线程完成时调用回调
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)
但这并不能解决我想做的事情
按照宫城先生的建议,答案少了一个逗号,
应该是args=(callback,)而不是args=(callback)
(这个post是标记这个post关闭)
如何像标准变量一样将函数传递给线程,
当我在 args 上传递函数时,我有一个不可迭代的错误
有我的代码摘要
from CallbackThread import CallbackThread
import time
import threading
class foo:
def runSomthing(self,callback):
#do things
callthread = threading.Thread(target=self.newthread, args=(callback))
callthread.start()
def newthread(self,calback):
print("runiing")
while True:
#if receve data (udp)
data = 0
#run mycallbacktest
calback(data)
def mycallbacktest(i):
print("hello world", i)
myobj = foo()
myobj.runSomthing(mycallbacktest)
我在类似的主题上看到过类似的东西 https://gist.github.com/amirasaran/e91c7253c03518b8f7b7955df0e954bb
并且我已经基于此进行了尝试,但我不确定这是在做什么,对我来说只是在线程完成时调用回调
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)
但这并不能解决我想做的事情
按照宫城先生的建议,答案少了一个逗号,
应该是args=(callback,)而不是args=(callback)
(这个post是标记这个post关闭)