我正在尝试利用队列模块的wait_for
方法。我有一个谓词的可调用对象,如果我不传递任何参数,它就可以工作,但是可调用对象需要一个 int
参数。
作品:
self.cv.wait_for(fn, timeout=5.0)
失败:
self.cv.wait_for(fn(1), timeout5.0)
这会生成错误“bool 不可调用”。
我尝试过以下方法:
self.cv.wait_for((fn(1)) , timeout=5.0)
结果:bool 不可调用
self.cv.wait_for((fn, 1), timeout=5.0)
结果:元组对象不可调用
self.cv.wait_for((fn, 1)(), timeout=5.0)
结果:元组对象不可调用
self.cv.wait_for((fn(), 1), timeout=5.0)
结果:fn 缺少 1 个必需的位置参数:'int'
fn 是一个简单的函数,仅用于测试。
fn
:
def fn(int):
if int:
return True
else:
return False
非常感谢任何指导。
最佳答案
Condition.wait_for
接受一个谓词,该谓词是不接受参数的可调用谓词。谓词的返回值可以是任何值,因为所有对象都有 bool 解释。
self.test
是一个接受一个参数的可调用函数,因此它不是一个合适的谓词。 self.test(1)
是调用方法的结果对象,它是一个 bool
,而不是可调用的。
在这种情况下,您使用 lambda
的方法是最简单的:
self.cv.wait_for(lambda: self.test(1), timeout=5.0)
如果您的函数足够复杂,您可以让它通过适当的重构返回可调用的谓词,而不是将其包装在 lambda 中。例如:
def fn(i):
def predicate():
return bool(i)
return predicate
...
self.cv.wait_for(fn(1), timeout=5.0)
关于Python:带参数的队列方法 wait_for 谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53355297/