python - Pytest + 多处理队列不能很好地协同工作

标签 python queue pytest python-multiprocessing

我正在测试多队列。我的测试涉及一个带有 getter 和 setter 的简单类,环绕多队列。

当我重新运行时,我的测试在通过和失败之间交替 [编辑:使用 block=False 时会发生这种情况。按照建议将其设置为 True 会挂起程序]。

我如何重写这个以便

(1) 清除程序执行与执行之间的多队列
(2)在.get()方法中读取队列中的所有值?

import multiprocessing
import queue

class MyClass:
    def __init__(self):
        self.q = multiprocessing.Queue()
        self.results = []

    def put(self, x):
        self.q.put(x)

    def get(self):
        while True:
            try:
                self.results.append(self.q.get(block=True))
            except queue.Empty:
                break
        return self.results

    @pytest.fixture
    def wrapped_queue():
        yield MyClass()

    def test_multiprocessing_queue(wrapped_queue):
        wrapped_queue.put("a")
        wrapped_queue.put("b")
        result = wrapped_queue.get()
        assert result == ["a", "b"]

最佳答案

这不是 pytest 的问题。队列背后发生的事情比你意识到的要多。

如果您设置 block=True在您的 setter/getter 中,它应该可以解决问题。

关于python - Pytest + 多处理队列不能很好地协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52900292/

相关文章:

python - scipy ndimage 没有属性过滤器?

python - 拉格朗日乘子与 scipy.optimize.linprog

Java:如何在递归调用中使用原始参数递归调用我的方法

python - 轻型 GBM 提前停止不适用于自定义指标

Python:将字符串的不同部分分成数组

c - C 中的队列数据结构

c# - 限项 list

python - Pytest 没有在终端中提供正确的输出

python - pytest 不会使用 mock.patch 引发 HTTPError

pytest:使用假设时的monkeypatch