在Python中,如何在线程回调中传递参数?
In Python, how do I pass parameters in a threaded callback?
基本上,我会观察逻辑电平以了解某种变化,然后计算其持续时间。因为我有很多不同的台词要看,所以我开始为每台台词创建一个函数。所以我想,为什么我不创建一个函数,根据触发的行使用不同的参数。
def myCallBack(pin, bool, Ftimer, Etimer):
## some more code here for checking bools and using timers
GPIO.add_event_detect(pin1, GPIO.both, callback=myCallBack(pin1, bool1, Ftimer1, Etimer1), bouncetime=200)
GPIO.add_event_detect(pin2, GPIO.both, callback=myCallBack(pin2, bool2, Ftimer2, Etimer2), bouncetime=200)
...
目前,我收到错误 "TypeError: Parameter must be callable"
这种方法甚至可能吗?我这样做是对的吗?
任何帮助,将不胜感激。
谢谢。
from functools import partial
callback=partial(myCallBack, pin1, bool1, Ftimer1, Etimer1)
这将生成一个不带参数的函数,调用时会调用 myCallBack
和 pin1
、bool1
、Ftimer1
和 Etimer1
。或者,尝试:
callback=lambda *a: myCallBack(pin1, bool1, Ftimer1, Etimer1)
另见 Python, how to pass an argument to a function pointer parameter?。
我不确定为什么这能解决我的问题,但它确实有效。我创建了一个 class 来制作对象,因为我在每条逻辑线上执行相同的功能集。我找到了这个 Whosebug link 并遵循了相同的模式。这对我需要完成的工作来说效果很好。
基本上,我会观察逻辑电平以了解某种变化,然后计算其持续时间。因为我有很多不同的台词要看,所以我开始为每台台词创建一个函数。所以我想,为什么我不创建一个函数,根据触发的行使用不同的参数。
def myCallBack(pin, bool, Ftimer, Etimer):
## some more code here for checking bools and using timers
GPIO.add_event_detect(pin1, GPIO.both, callback=myCallBack(pin1, bool1, Ftimer1, Etimer1), bouncetime=200)
GPIO.add_event_detect(pin2, GPIO.both, callback=myCallBack(pin2, bool2, Ftimer2, Etimer2), bouncetime=200)
...
目前,我收到错误 "TypeError: Parameter must be callable" 这种方法甚至可能吗?我这样做是对的吗? 任何帮助,将不胜感激。 谢谢。
from functools import partial
callback=partial(myCallBack, pin1, bool1, Ftimer1, Etimer1)
这将生成一个不带参数的函数,调用时会调用 myCallBack
和 pin1
、bool1
、Ftimer1
和 Etimer1
。或者,尝试:
callback=lambda *a: myCallBack(pin1, bool1, Ftimer1, Etimer1)
另见 Python, how to pass an argument to a function pointer parameter?。
我不确定为什么这能解决我的问题,但它确实有效。我创建了一个 class 来制作对象,因为我在每条逻辑线上执行相同的功能集。我找到了这个 Whosebug link 并遵循了相同的模式。这对我需要完成的工作来说效果很好。