Pytest + Multiprocessing Queue不能一起玩

时间:2018-10-19 21:45:19

标签: 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"]

1 个答案:

答案 0 :(得分:1)

这不是pytest的问题。队列中发生的事情比您想象的要多。

如果您在吸气剂中设置block=True,它将解决此问题。