使用多处理模块

2024-01-27

我正在尝试使用 python 2.6 中的多处理模块,但显然有一些我不明白的东西。我希望下面的类将通过 add() 发送给它的数字相加,并在 get_result() 方法中返回总和。下面的代码打印“0”,我希望它打印“2”。我错过了什么?

import multiprocessing

class AdderProcess(multiprocessing.Process):

    def __init__(self):
        multiprocessing.Process.__init__(self)
        self.sum = 0
        self.queue = multiprocessing.JoinableQueue(5)
        self.daemon = True
        self.start()

    def run(self):
        while True:
            number = self.queue.get()
            self.sum += number
            self.queue.task_done()

    def add(self, number):
        self.queue.put(number)

    def get_result(self):
        self.queue.join()
        return self.sum


p = AdderProcess()
p.add(1)
p.add(1)
print p.get_result()

附言。这个问题已经解决了。感谢您的回答!为了让任何读者更容易,这里是完整的工作版本:

import multiprocessing

class AdderProcess(multiprocessing.Process):

    def __init__(self):
        multiprocessing.Process.__init__(self)
        self.sum = multiprocessing.Value('d', 0.0)
        self.queue = multiprocessing.JoinableQueue(5)
        self.daemon = True
        self.start()

    def run(self):
        while True:
            number = self.queue.get()
            self.sum.value += number
            self.queue.task_done()

    def add(self, number):
        self.queue.put(number)

    def get_result(self):
        self.queue.join()
        return self.sum.value

p = AdderProcess()
p.add(1)
p.add(1)
print p.get_result()

Change self.sum = 0 to self.sum = multiprocessing.Value('d', 0.0),并使用self.sum.value访问或更改值。

class AdderProcess(multiprocessing.Process):    
    def __init__(self):
        ...
        self.sum = multiprocessing.Value('d', 0.0) 
        ...
    def run(self):
        while True:
            number = self.queue.get()
            self.sum.value += number    # <-- use self.sum.value
            self.queue.task_done()
    def get_result(self):
        self.queue.join()
        return self.sum.value           # <-- use self.sum.value

问题是这样的:一旦你打电话self.start() in __init__,主进程派生出一个子进程。所有值均被复制。现在有两个版本p。在主流程中,p.sum为 0。在子进程中,run方法被调用并且p.sum增至2。但是当主进程调用时p.get_result(),其版本为p仍然有p.sum等于 0。 所以打印0。

当想要在进程之间共享浮点值时,需要使用共享机制,例如mp.Value.

See "在进程之间共享状态 http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes” 了解有关如何分享价值观的更多选择。

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

使用多处理模块 的相关文章

  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 在 Pandas 中,如何从基于另一个数据框的数据框中删除行?

    我有 2 个数据框 一个名为 USERS 另一个名为 EXCLUDE 他们都有一个名为 电子邮件 的字段 基本上 我想删除 USERS 中包含 EXCLUDE 中包含电子邮件的每一行 我该怎么做 您可以使用boolean indexing
  • 如何在 Jupyter Notebook 中运行 Python 异步代码?

    我有一些 asyncio 代码在 Python 解释器 CPython 3 6 2 中运行良好 我现在想在具有 IPython 内核的 Jupyter 笔记本中运行它 我可以运行它 import asyncio asyncio get ev
  • numpy python 中的“AttributeError:'matrix'对象没有属性'strftime'”错误

    我有一个维度为 72000 1 的矩阵 该矩阵涉及时间戳 我想使用 strftime 如下所示 strftime d m y 为了得到像这样的输出 11 03 02 我有这样一个矩阵 M np matrix timestamps 我使用了
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • 从sklearn PCA获取特征值和向量

    如何获取 PCA 应用程序的特征值和特征向量 from sklearn decomposition import PCA clf PCA 0 98 whiten True converse 98 variance X train clf f
  • Python 是解释型的还是编译型的,或者两者兼而有之?

    据我了解 An 解释的语言是由解释器 将高级语言转换为机器代码然后执行的程序 实时运行和执行的高级语言 它一次处理一点程序 A compiled语言是一种高级语言 其代码首先由编译器 将高级语言转换为机器代码的程序 转换为机器代码 然后由执
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • 编辑 Jupyter Notebook 时 VS Code 中缺少“在选择中查找”

    使用 Jupyter Notebook 时 VSCode 中缺少 在选择中查找 按钮 它会减慢开发速度 所以我想请问有人知道如何激活它吗 第一张图显示了在 python 文件中的搜索 替换 第二张图显示了笔记本电脑中缺少的按钮 Python
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • 为什么我应该使用 WSGI?

    使用 mod python 一段时间了 我读了越来越多关于 WSGI 有多好的文章 但没有真正理解为什么 那么我为什么要切换到它呢 有什么好处 这很难吗 学习曲线值得吗 为了用 Python 开发复杂的 Web 应用程序 您可能会使用更全面
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • 从 python 检测 macOS 中的暗模式

    我正在编写一个 PyQt 应用程序 我必须添加一个补丁 以便在启用暗模式的 Macos 上可以读取字体 app QApplication Fix for the font colours on macos when running dark
  • 带有 RotatingFileHandler 的 Python 3 记录器超出 maxBytes 限制

    我使用以下代码来限制日志文件的大小 最小示例 import logging from logging handlers import RotatingFileHandler Set up logfile and message loggin
  • 字符串列表,获取n个元素的公共子串,Python

    我的问题可能类似于this https stackoverflow com questions 37514193 count the number of occurrences of n length not given string in
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • WPF 窗口中的透明 PNG

    我尝试将具有透明度的 PNG 图像应用到整个窗口 但窗口始终是白色的 有什么线索可以看到 PNG 的透明度吗 谢谢你 C public SplashScreen InitializeComponent var myBrush new Ima
  • 如果默认值不存在则后备背景图像

    我想将图像设置为背景 但图像名称可能是bg png or bg jpg 如果默认背景不存在 是否有任何非 javascript 方法可以创建替代图像的后备 body background url bg png background size
  • C# Json 将任何动态对象转换为键值对

    我正在编写一个工具 它将获取入站 Json 对象 并将其转换为 键值记录 有时可能称为扁平化 目的是避免工具在获取非常大或非常嵌套的 Json 对象时崩溃 因此我想避免递归 一个示例对象可能像这样 如下 包含嵌套数组 空值 你能想到的任何合
  • 在wxPHP中更新属性时如何刷新wxAuiManager窗格?

    我设置了一个简单的wxAuiManager系统包含八个文本控件 每个控件都设置为一个窗格 全部围绕一个中央静态控件排列 我有两个分别捕捉到顶部 左侧 右侧和底部窗格方向 这部分工作正常 我现在想修改每个窗格的属性 我认为可以通过重置关联的来
  • 使用 Fetch API 递归返回分页输出

    Summary 我想使用 JavaScript 的 Fetch API 递归地将分页输出整理到数组中 从 Promise 开始 我认为 async await 函数会更合适 Attempt 这是我的方法 global fetch requi
  • 为什么 Windows 上的 strftime() 返回 false? (我没有使用%e)

    这是我的代码 var dump strftime m d Y l M S time echo br var dump strftime Y d m H M S time 第一行返回 false 第三行返回预期的字符串 2012 10 09
  • 计算 NYSE 交易日的函数

    希望有人可以提供一个给定日期的函数 它将返回纽约证券交易所当月的交易日 如果考虑到假期 那就是额外的好处 如果没有 我也不太担心 提前致谢 我的个人包中有一个函数 名为TradingDates使用假期的 日历从timeDate http c
  • 需要帮助修复近似 pi 的算法

    我正在尝试为近似的算法编写 C 代码pi 它应该得到一个立方体的体积和该立方体内部球体的体积 球体的半径是立方体边长的 1 2 然后我应该将立方体的体积除以球体的体积并乘以 6 以获得 pi 它正在工作 但它在应该获得卷的部分做了一些奇怪的
  • IPython 在打印时忽略对象的 __repr__

    我写了一个子类defaultdict 我给了它自己的 repr 方法以便在交互式会话中自定义其外观 在常规 Python 会话中 这会按预期工作 Python 3 5 0 default Sep 20 2015 11 28 25 GCC 5
  • 在 C# 中,如何像 google calc 一样实现模数?

    我有一个代表形状的类 Shape 类有一个名为 Angle 的属性 我希望此属性的设置器自动将值包装到范围 0 359 中 不幸的是 一个简单的 Angle value 360 仅适用于正数 在 C 中 40 360 40 谷歌计算器可以做
  • 如何使用 FileHelpers 库将大型 SQL Server 表导出到 CSV 文件?

    我希望使用 C 和 FileHelpers 库将大型 SQL Server 表导出到 CSV 文件中 我也可以考虑 C 和 bcp 但我认为 FileHelpers 会比 bcp 更灵活 速度不是特殊要求 OutOfMemoryExcept
  • 开发和测试环境的不同 DateTimeFormat

    在我的 ASP NET MVC 项目中的 global asax cs 的 Application BeginRequest 方法中有代码 Thread CurrentThread CurrentCulture CultureInfo Cr
  • 调用带有太多参数的函数时的 GCC 行为

    我刚刚注意到 GCC 的一个行为对我来说似乎很奇怪 没有与其他编译器进行检查 如果我编译这段代码 include
  • sparql 精确匹配正则表达式

    我使用以下 sparql 查询从 dbpedia 中提取与特定信息框匹配的页面 PREFIX dbo
  • 共享会话与默认配置的会话

    两者有什么区别session以这两种不同方式创建的对象 NSURLSession session NSURLSession sharedSession and NSURLSessionConfiguration configuration
  • 返回后更新导航抽屉的选定状态

    后按后处理导航抽屉的选定状态的正确方法是什么 我有一个带有 n 个条目的导航抽屉 在列表视图中 就像 Android Studio 中的 SDK 示例一样 当我单击导航抽屉条目时 我希望将它们添加到后堆栈中 以便我可以返回到它们 在 onN
  • 如何更改 Vaadin 中的默认 HTML 模板

    我正在使用 Vaadin 和 Maven 应用程序 我想要的是更改默认的 html 模板 当我运行该应用程序时 生成的 HTML 如下所示
  • 我需要帮助为 SpeechSynthesizer 创建词典。某种模板,这样我就可以知道如何创建一个

    或多或少就是标题所说的 我希望创建一个希腊语文本到语音的词典 这样我就可以为 SpeechSynthesizer 创建我的语言 我在哪里可以找到某种模板 或者一些指导 或者您可以提供的任何内容都是可以接受的 因为 SpeechSynthes
  • Iron Python:Iron Python 有什么好处 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 python 很感兴趣 但我在 NET 环境中工作 所以我正在研究 Iron Python 并想知道它的用途 你能在里面写一个应
  • 使用多处理模块

    我正在尝试使用 python 2 6 中的多处理模块 但显然有一些我不明白的东西 我希望下面的类将通过 add 发送给它的数字相加 并在 get result 方法中返回总和 下面的代码打印 0 我希望它打印 2 我错过了什么 import