如何在Python多处理中的所有进程之间共享数据?

2024-06-28

我想在给定文章中搜索预定义的关键字列表,如果在文章中找到关键字,则分数加 1。我想使用多重处理,因为预定义的关键字列表非常大 - 10k 个关键字,文章数量为 100k。

我碰到this https://stackoverflow.com/questions/35157367/how-to-share-data-between-python-processes问题,但它没有解决我的问题。

我尝试过这个实现但是得到None结果。

keywords = ["threading", "package", "parallelize"]

def search_worker(keyword):
    score = 0
    article = """
    The multiprocessing package also includes some APIs that are not in the threading module at all. For example, there is a neat Pool class that you can use to parallelize executing a function across multiple inputs."""

   if keyword in article:
        score += 1
    return score

我尝试了下面两种方法,但得到了三种None结果。

Method1:

 pool = mp.Pool(processes=4)
 result = [pool.apply(search_worker, args=(keyword,)) for keyword in keywords]

Method2:

result = pool.map(search_worker, keywords)
print(result)

实际输出:[没有,没有,没有]

预期输出: 3

我考虑向工作人员发送预定义的关键字列表和文章,但我不确定我是否朝着正确的方向前进,因为我没有多处理的经验。

提前致谢。


这是一个使用的函数Pool。您可以传递文本和keyword_list,它就会起作用。你可以使用Pool.starmap传递元组(text, keyword),但是你需要处理一个有 10k 个引用的迭代text.

from functools import partial
from multiprocessing import Pool

def search_worker(text, keyword):
    return int(keyword in text)

def parallel_search_text(text, keyword_list):
    processes = 4
    chunk_size = 10
    total = 0
    func = partial(search_worker, text)
    with Pool(processes=processes) as pool:
        for result in pool.imap_unordered(func, keyword_list, chunksize=chunk_size):
            total += result

    return total

if __name__ == '__main__':
    texts = []  # a list of texts
    keywords = []  # a list of keywords
    for text in texts:
        print(parallel_search_text(text, keywords))

创建工作人员池会产生开销。可能值得针对简单的单进程文本搜索功能进行测试。可以通过创建一个实例来加快重复调用的速度Pool并将其传递到函数中。

def parallel_search_text2(text, keyword_list, pool):
    chunk_size = 10
    results = 0
    func = partial(search_worker, text)

    for result in pool.imap_unordered(func, keyword_list, chunksize=chunk_size):
        results += result
    return results

if __name__ == '__main__':
    pool = Pool(processes=4)
    texts = []  # a list of texts
    keywords = []  # a list of keywords
    for text in texts:
        print(parallel_search_text2(text, keywords, pool))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python多处理中的所有进程之间共享数据? 的相关文章

  • Django 3.1:带有异步生成器的 StreamingHttpResponse

    Django 3 1 文档 https docs djangoproject com en 3 1 topics async async views 7E text The 20main 20benefits 20are 20the 20a
  • 替换 pytest 中的测试用例继承?

    背景 在 Python 中unittest https docs python org 3 library unittest html在框架中 在一组基本测试上使用继承来将整套测试应用于新问题 并且偶尔添加其他测试是一种相当常见的习惯用法
  • 从 git 安装时,我可以强制 pip 进行浅表签出吗?

    以下命令从 git 存储库安装 Python 包 pip install git ssh email protected cdn cgi l email protection username repo git Collecting git
  • 一个类的多个实例

    我正在尝试用 python 编写各种动物的生活模拟 不可能命名我将要使用的类的每个实例 因为我无法知道会有多少个实例 所以 我的问题是 如何自动为对象命名 我正在考虑创建一个 Herd 类 它可以是该类型的所有动物同时存活 嗯 通常 您只需
  • Python中字典转小写

    我希望这样做 但为了一本字典 My string lower 是否有内置函数或者我应该使用循环 您将需要使用循环或列表 生成器理解 如果你想将所有的键和值都小写 你可以这样做 dict k lower v lower for k v in
  • 如何获取 Tkinter 标签文本?

    我正在制作一个用户将从中选择的地址列表 并且将返回地址文本 我需要使用Tkinter Label因为Tkinter Listbox不允许换行 关键是没有 get Label 类中的类似方法 我知道我可以做类似的事情 v StringVar
  • 在进程之间共享列表的正确方法?

    我想设置两个子流程 其中subprocess1不断生成数据 类型为list and subprocess2负责处理发来的数据subprocess1 I used multiprocessing Manager list 创建共享列表 但这是
  • 使用 PyQt5/Pyside2 设置重复的 SVG 图案作为主窗口/Qwidget 背景

    我已经通过生成了 SVG css 代码http www heropatterns com http www heropatterns com 我正在尝试使用它作为我的主窗口 Qwidget 的背景 我希望背景随着窗口变大或缩小而调整大小 我
  • 使用 ctypes 的 python 枚举模块

    之前enum模块已存在 c int或相关类型经常被用作替代枚举 但这没有也没有检查类型 现在 python 有一个enum模块 有没有办法直接使用它ctypes 是的 我们可以轻松创建自己的 CEnum 类 这要归功于 ctypes 允许我
  • 可视化链接攻击的最佳方式是什么

    我有一个如下图所示的 Networkx 图 我执行边缘攻击并观察结果子图的节点处的值的变化 例子 如果我攻击边 a 2 边 a 2 和 2 1 将被移除 解释一下 当边 a 2 受到攻击时 节点 2 的度数将 上述攻击会产生一个子图 每一条
  • 如何在条形图上添加值标签

    我正在创建一个条形图 但我不知道如何在条形图上添加值标签 在条形图的中心或正上方 我相信解决方案是使用 文本 或 注释 但我 a 不知道该使用哪一个 一般来说 还没有弄清楚何时使用哪一个 b 无法看到任何一个来呈现值标签 这是我的代码 im
  • 在pyspark中将RDD转换为Dataframe

    我正在尝试将 RDD 转换为 pyspark 中的 Dataframe My RDD abc 1 2 0 def 4 6 7 1 我想要 Dataframe 形式的 RDD Index Name Number 0 abc 1 2 1 def
  • 激活虚拟环境不起作用

    我创建了两个 virtualenv 并安装了两个不同版本的 django 现在我在激活两个环境时遇到问题 我喜欢这样 source Django1 6 bin activate 然后我看到环境被激活了 然后我这样做 pip install
  • 启动robotframework-RIDE(机器人框架IDE)时出错

    我已经安装了Robot Framework并安装了wxPython 然后安装了Ride 当我通过执行启动它时python ride py 它会遇到如下错误 我相信这与wxPython版本有关 不确定 有一系列UnreprError像这样
  • pandas 支持 DataFrame 的哪些绘图后端?

    pandas 确实允许与第三方一起绘图绘制后端 https pandas pydata org pandas docs stable development extending html plotting backends 我知道matpl
  • 无法在 BeautifulSoup 中获得正确的链接

    我正在尝试解析一些 HTML 并且想提取与特定模式匹配的链接 我正在使用find使用正则表达式的方法 但它没有给我正确的链接 这是我的片段 有人可以告诉我我做错了什么吗 from BeautifulSoup import Beautiful
  • 调用exe中定义的函数

    我需要知道一种从 python 脚本调用 exe 中定义的函数的方法 我知道如何从 py 文件调用整个 exe 除非您的 EXE 是 COM 对象 或者像 dll 那样专门导出某些函数 否则这是不可能的 对于 COM 方法 请查看以下资源
  • 使用具有阿拉伯字符的 json.dumps 将字典转换为 json [重复]

    这个问题在这里已经有答案了 我有一本包含阿拉伯语单词的字典 例如 data name name print json dumps data file open data json a encoding utf 8 Output name u
  • 在Python中使用argparse解析整个JSON

    我正在尝试使用 ARGPARSE 库在一个简单的参数中解析整个 Json 问题是当它遇到儿子内部的不同元素 例如 和 时 它会突然停止 这是测试代码 parse py import argparse parser argparse Argu
  • 从 pexpect 中提取 stderr

    我的问题很简单 我可以吗 expect 使用 pexpect 查看 stderr 上的某些输出 它似乎pexpect spawn 只能用于期望 stdout 上的输出 乌托邦的例子 import pexpect child pexpect

随机推荐

  • android中单例的问题

    我有一个 Android 应用程序 其中有几个活动 每个活动都会下载一个 xml json 提要 对其进行解析并将其推送到一个单例 通常作为数组列表 然而 在经历了各种活动之后 单例似乎正在消亡 并且大多数早期下载的数组列表现在都是空的 为
  • 如何将变量从命令行传递到 CMake Toolhain 文件?

    有没有办法在调用 cmake 时将变量传递给工具链文件 例如 我有以下工具链文件 message FOO FOO 我尝试过以下方法 但没有成功 该变量未在工具链文件中设置 cmake
  • pytest 在参数化中使用固定装置作为参数

    我想使用固定装置作为参数pytest mark parametrize或者会产 生相同结果的东西 例如 import pytest import my package pytest fixture def dir1 fixture retu
  • 如何自定义 django 管理更改页面以返回到“保存”时的特定 URL

    我想使用 django contrib admin 页面来编辑我的模型 但从我自己的视图中调用单独的更改页面 然后在用户单击 保存 后返回那里 理想情况下 这应该通过将返回 URL 附加到管理页面的 url 来实现 如 return url
  • Flask多参数从一个url查询数据库的多列时如何避免多个if语句

    我正在尝试使用 Flask 作为前端来构建一个会计数据库 主页是分类帐 有九列 日期 描述 借方 贷方 金额 帐户 参考 日记帐 和 年份 我需要能够每次查询一次两个 已有超过 8000 个条目 并且还在不断增加 到目前为止 我的代码显示了
  • AngularJS - 从 run 方法访问 ng-init 变量

    1 我在 ng init 中初始化了变量 例如 ng init password Mightybear 2 我想从 run方法访问它 例如 anguar module ngApp run function Access password h
  • 检查行是否存在,Laravel

    我有以下数据库结构 items id name user id users table id name user favorites table id user id item id 在我的项目永久链接页面上 我有一个 添加到收藏夹 按钮
  • asset_host 和相关协议 URL 更改为 http

    我的应用程序 Rails 4 0 0 的某些元素可通过 http 和 https 连接使用 因此我已将 asset host 配置为使用相对协议 url 这应该允许浏览器进行切换它希望从中获取资产的协议 config action cont
  • 实现导航抽屉后通知栏呈灰色

    我正在尝试学习 Android 中导航抽屉的实现 在一项活动中 我将导航抽屉置于状态栏 透明 下方和应用栏上方 一切正常 左屏幕截图 在同一应用程序的另一个活动中 我试图创建在应用程序栏下方拉起的导航抽屉 但在这里 状态栏由于某种原因变成灰
  • std::ofstream,写入前检查文件是否存在

    我正在实现文件保存功能Qt使用 C 的应用程序 我正在寻找一种方法来检查所选文件在写入之前是否已存在 以便我可以向用户提示警告 我正在使用一个std ofstream我并不是在寻找Boost解决方案 这是我最喜欢的隐藏功能之一 我随身携带以
  • 在 React 中使用内联样式和纯 CSS 字符串

    我正在ReactJS中重写一个基于AngularJS的现有应用程序 在应用程序中 用户可以提供 CSS 样式字符串来设置某些元素的样式 在 AngularJS 中这没有问题 我只是将 style 属性设置为给定的字符串 在 ReactJS
  • 自动将 c++ dll 包装到 c# 中

    我想在 C 项目中使用 C 库 是否有任何包装工具可以自动导入所有类 SWIG http www swig org 可以帮助创建一个由两部分组成的包装器 一侧为 C 一侧为 C 不过 设置正确的生成文件需要一些工作 另一种需要更多手动编码的
  • 如何使用 SQL 语法更改主键约束?

    我有一个表 其主键约束中缺少一列 我不想通过 SQL Server 对其进行编辑 而是想将其放入脚本中以将其添加为更新脚本的一部分 我可以使用什么语法来执行此操作 我必须删除并重新创建关键约束吗 是的 唯一的方法是使用 Alter 表删除约
  • 如何重置anaconda根环境

    如何重置anaconda的root环境 必须有一个简单的 conda Reset 命令来执行此操作 我不想再次重新安装 anaconda 我有其他不想覆盖的 virtualenv 如果我再次安装 anaconda 就会发生这种情况 See
  • 无法加载资源:加载 .mp3 文件时出错

    我正在使用以下命令向我的应用程序添加声音audioplayers包 但在第一次构建时没有播放声音 加载文件时热重启面团后 我收到此异常 E flutter 32175 ERROR flutter lib ui ui dart state c
  • GCM 注册 ID 已更改

    我开发了一个使用 GCM 技术的应用程序 一切正常 我观察到设备的注册 ID 一段时间后发生了变化 这导致我的应用程序出现问题 因为我的应用程序依赖于注册 ID 那么如何为客户获取固定的Reg ID呢 我读完了这两个原因here http
  • Angular 6 不赞成同时使用 formControlName 和 ngModel

    我有 Angular 6 项目 我一起使用 ngModel 和 formControlName 但角度在下面给了我警告 例如 当我从网格中的按钮打开更新弹出窗口时 我可以轻松地自动绑定更新弹出窗口中的输入 但 Angular 7 表示删除
  • C# 是“??”吗?运算符线程安全吗?

    大家都知道这不是线程安全的 public StringBuilder Builder get if builder null builder new StringBuilder return builder 那这个呢 public Stri
  • 错误:找不到模块:错误:无法解析“@angular/cdk/scrolling”

    我遇到了错误 找不到模块 错误 无法解析 angular cdk scrolling 一旦我在 app module ts 中添加 import TableModule from primeNG 为什么会抛出这个错误 我没有看到 prime
  • 如何在Python多处理中的所有进程之间共享数据?

    我想在给定文章中搜索预定义的关键字列表 如果在文章中找到关键字 则分数加 1 我想使用多重处理 因为预定义的关键字列表非常大 10k 个关键字 文章数量为 100k 我碰到this https stackoverflow com quest