我看到了下面为在python中模拟多处理调用而提供的函数
class MockPoolApplyResult:
def __init__(self, func, args):
self._func = func
self._args = args
def get(self, timeout=0):
return self._func(*self._args)
monkeypatch.setattr("multiprocessing.pool.Pool.starmap",
lambda self, func, args=(), kwds={}, callback=None, error_callback=None:
MockPoolApplyResult(func, args))
下面的lambda函数做什么?我如何检查调用它的次数
monkeypatch.setattr("multiprocessing.pool.Pool.starmap",
lambda self, func, args=(), kwds={}, callback=None, error_callback=None:
MockPoolApplyResult(func, args))
λ等于:
它用一个具有完全相同参数的函数替换
Pool
类对象here上的starmap
方法预期的行为可能是,当您拥有
my_pool = Pool(3)
并运行my_pool.starmap(myfunc, [1,2,3]); my_pool.get()
时,它将在当前进程内执行myfunc(1)
、myfunc(2)
和myfunc(3)
,而不是池中的进程执行这些调用。但是看起来它实际上会调用myfunc(1, 2, 3)
,因为MockPoolApplyResult.get()
是如何编写的编辑。忘记回答问题的第2部分:您无法跟踪monkeypatched函数的调用次数。为此,您需要模拟starmap函数,然后模拟对象将跟踪调用的数量。您可以直接使用内置的
unittest.mock
模块或使用pytest-mock包装程序包来实现这一点相关问题 更多 >
编程相关推荐