在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)

这将生成一个不带参数的函数,调用时会调用 myCallBackpin1bool1Ftimer1Etimer1。或者,尝试:

callback=lambda *a: myCallBack(pin1, bool1, Ftimer1, Etimer1)

另见 Python, how to pass an argument to a function pointer parameter?

我不确定为什么这能解决我的问题,但它确实有效。我创建了一个 class 来制作对象,因为我在每条逻辑线上执行相同的功能集。我找到了这个 Whosebug link 并遵循了相同的模式。这对我需要完成的工作来说效果很好。