多进程运行含有任意参数的函数、为什么multiprosessing会进行多次初始化

2023-12-18

目录

多进程运行含有任意个参数的函数,以map_async为例

为什么multiprocessing 的了进程会多次初始化?


多进程运行含有任意个参数的函数,以map_async为例

使用偏函数:偏函数有点像数学中的偏导数,可以让我们只关注其中的某一个变量而不考虑其他变量的影响。

如以下代码中,我们要将set_seq、tokenizer和model作为变量传入“Seq_to_vec”函数中。particial函数中,“Seq_to_vec”是一个函数,tokenizer和model是不变的量,“map_async”中particial_func为偏函数,set_seq为可迭代对象。

#########################
####### 多进程
#########################
particial_func = partial(Seq_to_vec,tokenizer = tokenizer, model = model)
torch.multiprocessing.set_start_method('spawn', force=True)
pool = multiprocessing.Pool(2)
print(f'~~~~~~~~~~~~~~~~~~')
seq_embeddings_list = pool.map_async(particial_func, seq_set).get()
seq_embeddings = {}

a = time.time()
for i in seq_embeddings_list:
    seq_embeddings.update(i)
b = time.time()
print(f'处理的时间{b-a}')
print(f'----------------')
pool.close()
pool.join()

为什么multiprocessing 的了进程会多次初始化?

在使用multiprocessing模块创建子进程时,子进程在初始化的过程中确实会执行次。这是因为子进程是通过fork或spawn 的方式创建的,而fork 会复制父进程的有资源,包括代码段、数据段、堆栈等。因此,子进程会执行一次父进程的初始化代码。
在某些情况下,你可能会看到子进程多次初始化的现象。这可能是因为在某些情况下主模块 (包含你的代码的那个文件)被多次导入。当子进程启动时,它会执行主模块的代码,如果主模块中有全局变量、函数定义等,这些代码会被重新执行。
为了避免多次初始化,可以在主程序中添加如下的保护代码:

if __name__ == '__main__':

这样的话,当子进程启动时,它会检查"__name__"变量,确保只有在主程序中才执行相关的初始化代码。这是因为在 Windows 上,每个子进程都会从头执行一次脚本,而在类 Unix 系统上,它们通过 fork 创建,然后从父进程中继承代码和数据段
使用这个保护条件可以确保在子进程中只执行主程序的初始化代码,而不是执行整个脚本。这通常能够解决多次初始化的问题。

参考

Python:多进程运行含有任意个参数的函数

多进程multiprocessing——apply、map

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

多进程运行含有任意参数的函数、为什么multiprosessing会进行多次初始化 的相关文章

  • Python 和 Numpy 是 nan 和 set

    我在使用 Python 的 Numpy set 和 NaN 非数字 时遇到了不可预测的行为 gt gt gt set np float64 nan np float64 nan set nan nan gt gt gt set np flo
  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • McNemar 在 Python 中的测试以及分类机器学习模型的比较 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有用 Python 实现的好的 McNemar 测试 我在 Scipy stats 或 Scikit
  • 如何在python中附加两个字节?

    说你有b x04 and b x00 你如何将它们组合起来b x0400 使用Python 3 gt gt gt a b x04 gt gt gt b b x00 gt gt gt a b b x04 x00
  • 如何调整 matplotlib 单选按钮的大小和纵横比?

    我已经尝试了几个小时来使简单的单选按钮列表的大小和纵横比正确 但没有成功 首先 导入模块 import matplotlib pyplot as plt from matplotlib widgets import RadioButtons
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • 如何在 Python 中的函数入口、内部和退出处进行日志记录

    我希望能够使用 Python 日志记录工具在我的代码中进行简单且一致的日志记录 我能够执行以下操作 我希望所有现有 未来的模块和函数都有 输入 和 完成 日志消息 我不想添加相同的代码片段来定义日志记录参数 如下所示don t want t
  • 仅当某些值相等时,如何才能将一个文本文件中的值替换为另一个文本文件中的其他值?

    我有一个名为finalscores txt我想创建一个 python 脚本 它将打开它并从两个单独的列中读取值 这是我的finalscores txt file Atom nVa predppm avgppm stdev delta QPr
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我

随机推荐

  • Navicat关闭自动检查更新版本教程

    Navicat关闭自动检查更新版本教程 首先 点击菜单中的工具菜单 弹出了下拉菜单选中为选项 点击选项 首先 点击菜单中的工具菜单 弹出了下拉菜单选中为选项 点击选项 去掉勾选上在启动时自动检查更新选项
  • android无线调试连接

    开发时 遇到一些设备无法通过USB线连接adb时 可以尝试使用wifi无线调试 首先 要确保手机和电脑在同一个局域网内 再到开发者选项中打开无线调试 并进入子页面 如下 图一 无线调试设置界面 点击使用配对码配对设备 会弹出如下对话框 图二
  • ubantu22版本配置静态IP地址

    文章目录 编辑网络配置文件 应用网络配置 查看网络配置结果 编辑网络配置文件 在Ubuntu中配置静态IP地址可以通过以下步骤实现 打开终端 使用以下命令编辑网络配置文件 etc netplan 00 installer config ya
  • 【web网页制作】html+css网页制作游戏主题-王者荣耀(5页面)【附源码下载】

    涉及知识 游戏主题网页制作 王者荣耀网页制作成品 游戏网页制作成品 游戏主题web开发 期末网页大作业 网页作业成品 web前端源码实例 如何制作网页 网页设计思路 如何从零开始制作web页面 专栏 web前端大作业网页制作 关于我 一个持
  • Android NDK开发详解Wear之处理 Wear 上的数据层事件

    Android NDK开发详解Wear之处理 Wear 上的数据层事件 等待数据层调用的状态 异步调用 同步调用 监听数据层事件 使用 WearableListenerService
  • 题解 | #浙江大学用户题目回答情况#

    快手测开二面面经 国企面经 多家 得物 测开 一面 中国联通陕西省分公司薪资待遇 京东健康前端实习一面凉经 求java推荐项目 面经回馈 秋招及实习历程中笔经 面经 时间梳理 国企银行 秒杀项目常见问题 终焉篇 双非本产品经理35w 终于来
  • Redis 底层数据结构

    在 Redis数据结构和对象机制 中提到的图中 我们知道 可以通过 redisObject 对象的 type 和 encoding 属性 可以决定Redis 主要的底层数据结构 SDS QuickList ZipList HashTable
  • EMC RI/CI测试方案助您对抗电磁设备干扰!

    方案背景 电磁或射频干扰的敏感性 会给工程师带来重大的风险和安全隐患 尤其是在工业 船用和医疗设备环境 这些环境系统中的控制 导航 监控 通信和警报等关键零部件必须具备电磁抗扰水平 以确保系统始终正常运行 抗扰系统测试方案一般分为传导抗扰与
  • 大语言模型加速信创软件 IDE 技术革新

    QCon 全球软件开发大会 上海站 将于 12 月 28 29 日举办 会议特别策划 智能化信创软件 IDE 专题 邀请到 华为云开发工具和效率领域首席专家 华为软件开发生产线 CodeArts 首席技术总监王亚伟担任专题出品人 为专题质量
  • System.Text.Json.JsonSerializer 自定义实现序列化 DataSet、DataTable

    System Text Json 从 NET Core 3 1 开始 为了能够序列化这些类型 您需要为JsonConverter
  • sqlserver dba日常操作

    查询慢sql的方法 1 whoisactive 安装方法 http whoisactive com downloads 下载地址 将下载好的zip包放到sqlserver服务器中 文件 打开 文件 下载好的zip包 在查询窗口点击执行 新建
  • 20231218_105720 java 编码与解码

    普通编码 编的码就是编辑器的配置编码 默认是utf 8 byte bytes 中国武汉 getBytes 普通解码 解的码默认按编辑器的配置编码进行解析 默认是utf8 String s new String bytes 将字符串编码为GB
  • 【数学证明 笔记01】证明常见的逻辑方法有哪些?

    文章目录 一 声明 二 直接证明 三 反证法 四 数学归纳法 五 对证法 六 构造法 七 分情况讨论 一 声明 本帖持续更新中 如有纰漏 望指正 二 直接证明 原理 通过一系列逻辑推理和推断来证明目标命
  • 短剧开始“海外开花”

    前不久 一款名为ReelShort的短剧App在国外大杀四方 上了不少新闻不说 甚至还在一夜之间登顶了美国的App下载排行榜 而这一切都得益于国产短剧在海外市场的野蛮生长 谁能想到 曾经风靡国内的霸道甜宠 豪门恩怨 重生复仇 先婚后爱 这些
  • 眼神矫正AI一键修改你的眼睛眼球,直视相机!

    1 系统要求 软件运行支持32位 64位window 10 11系统 硬性要求 英伟达 RTX20系列或者更高级别 其他要求无 2 下载安装 链接 百度网盘 请输入提取码 提取码 1234 复制这段内容后打开百度网盘手机App 操作更方便哦
  • 基于springboot的古城民宿管理系统【论文、源码、开题报告】

    博主介绍 全网个人号和企业号 粉丝40W 每年辅导几千名大学生较好的完成毕业设计 专注计算机软件领域的项目研发 不断的进行新技术的项目实战 热门专栏 推荐订阅 订阅收藏起来 防止下次找不到 千套JAVA实战项目持续更新中 上百套小程序实战项
  • 解决:soundfile打开opus文件出错: File contains data in an unimplemented format.

    Python的soundfile库依赖于libsndfile库 需要安装最新版本 sudo apt get update sudo apt get install libsndfile1 如果之前已经安装soundfile 则可能采用了旧版
  • IdentityServer如何生成mysql ef core连接源码和迁移Migration

    https gitee com heminzhang identity server mysql migrations JohnHe404 IdentityServerMysqlMigrations GitHub 复制最新的Identity
  • go语言实现文件夹上传前后端代码案例

    go语言实现文件夹上传前后端代码案例 前端用于上传的测试界面 如果上传的文件夹有子文件要遍历子文件夹创建出子文件夹再进行拷贝 需要获取文件名和对应的路径 将文件的相对路径和文件对象添加到FormData中 这几行代码很关键 for let
  • 多进程运行含有任意参数的函数、为什么multiprosessing会进行多次初始化

    目录 多进程运行含有任意个参数的函数 以map async为例 为什么multiprocessing 的了进程会多次初始化 多进程运行含有任意个参数的函数 以map async为例 使用偏函数 偏函数有点像数学中的偏导数 可以让我们只关注其