gpt4 book ai didi

Python:模拟的调用计数无法通过多处理并行执行

转载 作者:行者123 更新时间:2023-12-03 13:42:23 25 4
gpt4 key购买 nike

我正在尝试测试一个简单的模块以进行并行化。这个模块提供了一个简单的函数run_tasks(tasks, use_multiprocessing) .我的简单测试包括使用 MagicMock 类生成任务列表、调用 run_tasks 并测试是否所有模拟都只被调用了一次。

在指定串行运行的情况下,所有模拟都被调用一次。但是,在并行运行的情况下,模拟的调用计数为零。我想这是模拟模块的问题,因为如果任务包含打印语句,这将同时执行,串行和并行运行。

这是测试代码(注:test_run_tasks_in_parallel 失败,而 test_run_tasks_serially 为绿色):

from unittest import TestCase
from mock import mock

from src.stochastic_simulation.util.embarrassing_parallelization import run_tasks
from src.stochastic_simulation.simulation.task import Task


class TestRunTasks(TestCase):
def setUp(self):
self.functions_to_run = [mock.MagicMock() for i in range(0, 9)]
self.test_tasks = [Task(function, None) for function in self.functions_to_run]

def test_run_tasks_in_parallel(self):
run_tasks(self.test_tasks, use_multiprocessing=True)
for function in self.functions_to_run:
function.assert_called_once()

def test_run_tasks_serially(self):
run_tasks(self.test_tasks)
for function in self.functions_to_run:
function.assert_called_once()

这是模块
import multiprocessing as mp


def run_task(task):
task.run()


def run_tasks(tasks, use_multiprocessing=False):
if use_multiprocessing:
available_processors = mp.cpu_count() - 1
print "Distributing tasks among {} processors".format(available_processors)

pool = mp.Pool(processes=available_processors)
_ = pool.imap_unordered(run_task, tasks, chunksize=1)

else:
print "No multiprocessing"
for task in tasks:
task.run()

最佳答案

我遇到了类似的问题,请参阅 mock.patch and multiprocessing
解决方法是更换mock.MagicMock()SharedMock() https://github.com/elritsch/python-sharedmock

关于Python:模拟的调用计数无法通过多处理并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39957460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com