用nose测试python多处理池代码

2024-05-07

我正在尝试编写测试nose http://nose.readthedocs.org/en/latest/建立一些东西 使用多处理计算。

我有这个目录结构:

code/
    tests/
        tests.py

test.py 看起来像这样:

import multiprocessing as mp


def f(i):
    return i ** 2


pool = mp.Pool()
out = pool.map(f, range(10))


def test_pool():
    """Really simple test that relies on the output of pool.map.
    The actual tests are much more complicated, but this is all
    that is needed to produce the problem."""
    ref_out = map(f, range(10))
    assert out == ref_out

if __name__ == '__main__':
    test_pool()

运行从code目录,python tests/tests.py passes.

nosetests tests/tests.py fails去完成。它启动了,但从未接通对pool.map并且只是挂起。

这是为什么?最简单的解决方案是什么?


这个问题与以下事实有关:pool.map被称为“全球级别”。通常您希望避免这种情况,因为即使您的文件只是导入,这些语句也会被执行。

鼻子必须导入你的模块 https://github.com/nose-devs/nose/blob/bee2720b041e7a030124273dac6d39da562e4738/nose/loader.py#L412-L413能够找到您的测试并稍后执行它们,因此我相信问题是在导入机制启动时发生的(我没有花时间尝试找出此行为的确切原因)

您应该将初始化代码移至测试装置;鼻子支撑固定装置with_setup https://nose.readthedocs.org/en/latest/testing_tools.html#nose.tools.with_setup装饰师。这是一种可能性(可能是最简单的改变,同时保持pool and out作为全局变量):

import multiprocessing as mp
from nose import with_setup

pool = None
out  = None

def f(i):
    return i ** 2

def setup_func():
    global pool
    global out
    pool = mp.Pool()
    out  = pool.map(f, range(10))

@with_setup(setup_func)
def test_pool():
    """Really simple test that relies on the output of pool.map.
    The actual tests are much more complicated, but this is all
    that is needed to produce the problem."""
    global out
    ref_out = map(f, range(10))
    assert out == ref_out

if __name__ == '__main__':
    test_pool()

执行:

$ nosetests tests/tests.py
.
----------------------------------------------------------------------
Ran 1 test in 0.011s

OK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用nose测试python多处理池代码 的相关文章

随机推荐

  • 在 JMETER 中循环遍历 JSON 响应 +

    我正在使用 Jmeter 进行性能测试并卡在以下点 我从 Webapi 收到 JSON 响应 如下所示 PersonInfoList Person 0 id 1 name Steve 1 Person id 2 name Mark 我需要根
  • 使用 HashSet 创建整数集

    我想创建一个表示整数集的类 使用HashSet
  • 获取 django 的本地时区

    我有一个mysqlDATETIME存储在系统时间 UTC 中的值 我需要将其转换为 django 中的本地时区 这是我目前拥有的 value in mysql timestamp 2013 02 01 22 48 45 settings p
  • 我如何在 C++ 中将数组存储到队列

    queue lt int gt qq for int i 0 i lt N i int cc 2 i i 1 qq push cc N很大但不精确 所以我想使用队列 我想存储很多数组来排队 但是 qq 存储的数组是同一个 我该怎么做 你的代
  • jQuery 悬停滑动?

    检查底部是否有修订版 好吧 问题就到这里了 我有一个li with a div在里面 我试图将鼠标悬停在li得到div向上滑动到视图中 这是 HTML li div h4 title h4 p description p div li 现在
  • Apache Kafka 与 Apache Storm

    Apache Kafka 分布式消息系统Apache Storm 实时消息处理 我们如何在实时数据管道中使用这两种技术来处理事件数据 就实时数据管道而言 在我看来 两者的工作都是相同的 我们如何在数据管道上使用这两种技术 您可以使用 Apa
  • 通过 ConfigurableApplicationContext refresh() 重新加载 Spring 应用程序上下文是否被认为是不好的做法

    我们有一个 Spring 应用程序托管在共享tomcat实例 有时我们必须重新加载 Spring 应用程序上下文 但又不想重新启动 Tomcat 服务器 因为其他应用程序也托管在那里 正在通过以下方式刷新 spring 应用程序上下文 Co
  • 理解 git log --stat 输出

    我试图理解的输出git log stat命令 第一个输出 commit 4c90aee323acc337a37040e02a0a3644f4155738 Date Fri May 1 22 46 11 2015 0400 Submittin
  • java:使用2个线程打印奇偶数

    我正在尝试交替使用 2 个不同的线程打印奇数和偶数 我能够使用等待 通知和同步块来实现它 但现在我想评估我们是否可以在不使用等待 通知和同步的情况下实现它 以下是我的代码 但它不起作用 public class OddEvenUsingAt
  • 在react ComponentDidMount中访问this.props

    我是个新手 无法做出反应 并且陷入了某个项目 问题是我有一个api url in this props从父组件接收 在这个子组件中我想使用api url使用 JSON 获取一些数据 在父组件中我有 Repositories api url
  • Java刷新第二种形式

    我有两种形式 第一个是使用jslider来确定按钮的数量 第二种形式是根据jslider值显示jbuttons 当我单击 jbutton2 时 第二个窗体显示并显示按钮 它工作得很好 但是 我想在第二个表单上创建 jbutton 而不单击第
  • ASP.NET 网站中的 webbrowser 类

    我有一个要求 需要访问一个网页并对其进行截图 为此 我必须创建一个 ASP NET 以便用户可以输入网站 URL 我试图创建一个 Web 浏览器控件 但后来意识到我无法在 ASP NET 网站中创建 Web 浏览器控件 我正在尝试做这样的事
  • printf 中的空格作为分组分隔符

    我知道如何使用逗号printf作为分组分隔符以类似格式打印值1 000 000 00 以我正在使用命令的方式打印它 System out printf 2f value 但如何使用空格作为分组分隔符来格式化值 例如1 000 000 00
  • 从扩展后台或弹出窗口发送消息到内容脚本不起作用

    我知道这个问题已经以不同的方式被反复问过 但我尝试过一遍所有的答案 希望我没有错过任何人 但没有一个对我有用 这是我的扩展程序的代码 显现 name test version 1 1 background scripts contextMe
  • 使用 Express/Node 和 MongoDB 响应 POST 请求

    我正在编写一个程序 该程序使用 React 作为前端 并使用 Express Node API 作为后端 然后在 MongoDB 数据库中执行 CRUD 操作 现在 我正在使用本机 JS fetch API 在前端执行 GET POST 操
  • 如何在 React 中正确捕获 Materialize-CSS datepicker 值?

    我希望创建一个带有日期选择器 https materializecss com pickers html在我的 React 组件中物化CSS https materializecss com 该表单捕获的字段不多 而且结构相当简单 返回的表
  • 使用webpack输出ES模块

    使用 Rollup 我可以通过简单地设置来输出 ES 模块format选项 es 我怎样才能用 webpack 做同样的事情 如果现在不可能的话 webpack 有计划添加吗 我在里面唯一找到的东西的文档output libraryTarg
  • magrittr 三通管 %T>% 当量

    我正在查看文档中 magrittr 三通管 T gt 的示例 但我并没有立即明白它在做什么 有人可以展示没有三通管的等效代码是什么吗 rnorm 200 gt matrix ncol 2 T gt plot gt plot usually
  • 以编程方式验证 X509 证书和私钥匹配

    我使用以下命令创建了 RSA 密钥对EVP aes 256 cbc 密码 私钥采用 PEM 编码并具有密码 这需要用户输入密码 这是创建私钥的调用 Save private key bio priv BIO new file full as
  • 用nose测试python多处理池代码

    我正在尝试编写测试nose http nose readthedocs org en latest 建立一些东西 使用多处理计算 我有这个目录结构 code tests tests py test py 看起来像这样 import mult