我试图从回调函数更改类的属性,但属性的值总是等于它初始化的值,即为0。
class Rainfall:
def __init__(self):
self.rainHalfHourCounter = 0
def incrementRain(self,channel):
self.rainHalfHourCounter = self.rainHalfHourCounter + 1
print "incrementRain ",self.rainHalfHourCounter
rainfall = Rainfall()
GPIO.add_event_detect(11, GPIO.BOTH, callback = rainfall.incrementRain,bouncetime = 200)
while True:
print self.rainHalfHourCounter
incrementRain
函数是回调函数。此功能设置为我的一个RPi gpio引脚上的中断(但基本上只是一个回调函数)。 incrementRain
函数中的值会发生变化,但class属性不会更改,因此我无法使用self.rainHalfHourCounter
函数之外的incrementRain
。 while循环中的打印行始终打印0.它从不递增。这是线程安全的问题吗?这个问题可能有一个简单的解决方案吗?
非常感谢任何帮助/简短示例代码。
答案 0 :(得分:0)
以下是Rainfall.incrementRain作为回调的示例用法,它完全正常。
class Rainfall:
def __init__(self):
self.rainHalfHourCounter = 1
def incrementRain(self,channel):
self.rainHalfHourCounter = self.rainHalfHourCounter + 1
print "incrementRain ",self.rainHalfHourCounter
class TestCallback(object):
def __init__(self):
self.callbacks = []
def addCallback(self, callback):
self.callbacks.append(callback)
def run(self, *args):
for func in self.callbacks:
#invoke all callbacks with passed in arguments
func(*args)
t = TestCallback()
#First call, should output 1
r=Rainfall()
r.incrementRain(None)
t.addCallback(r.incrementRain)
#Callback, should output 2
t.run(None)
输出:
incrementRain 2
incrementRain 3