Python:带参数的队列方法 wait_for 谓词

标签 python python-3.x

我正在尝试利用队列模块的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/

相关文章:

python - 在 Python 中释放内存

python - 找不到我的 Python 3.3 语法错误

python - 主循环不等待 python 多处理池完成并卡住

python - 如何根据单列对数据框中的唯一表进行排序?

python - max() 或 min() 函数执行多少次比较?

python - 如何等待子进程?

python - 如何在Python中找到.wav文件的持续时间?还是在文件停止播放时如何设置标志?

python - Pandas 按名称将几组列融化成多个目标列

python - 类型错误:需要类似字节的对象,不是 'str',但类型是 'bytes'

python - 为什么我得到的是生成器对象而不是整数?