os.fork 和 multiprocessing.Process 之间的行为差​​异

2024-01-11

我有这个代码:

import os

pid = os.fork()

if pid == 0:
    os.environ['HOME'] = "rep1"
    external_function()
else:
    os.environ['HOME'] = "rep2"
    external_function()

和这段代码:

from multiprocessing import Process, Pipe

def f(conn):
    os.environ['HOME'] = "rep1"
    external_function()
    conn.send(some_data)
    conn.close()

if __name__ == '__main__':
    os.environ['HOME'] = "rep2"
    external_function()
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print parent_conn.recv()
    p.join()

The external_function通过在环境变量中找到的目录中创建必要的子目录来初始化外部程序HOME。该函数在每个进程中仅执行一次此工作。

对于第一个示例,它使用os.fork(),目录按预期创建。但对于第二个例子,它使用multiprocessing,只有目录rep2被创建。

为什么第二个示例不在两者中创建目录rep1 and rep2?


您正在寻找的答案已详细解决here https://stackoverflow.com/questions/2276117/python-multiprocessing-process-vs-standalone-python-vm。还有不同操作系统之间差异的解释。

一个大问题是forkWindows 上不存在系统调用。因此,当运行Windows操作系统时,不能使用此方法。multiprocessing是执行当前运行程序的一部分的高级接口。因此,它 - 就像分叉一样 - 创建进程当前状态的副本。也就是说,它会为您处理程序的分叉。

因此,如果有的话,您可以考虑fork()用于分叉程序的较低级接口,以及multiprocessing库成为分叉的更高级别接口。

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

os.fork 和 multiprocessing.Process 之间的行为差​​异 的相关文章

  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 如何导出和导入现有用户(及其权限!)

    我有一个现有的 MySQL 实例 测试 包含 2 个数据库和几个用户 每个用户对每个数据库都有不同的访问权限 我现在需要复制其中一个数据库 进入生产环境 和用户与之相关 复制数据库是easy https stackoverflow com
  • 无法读取 JSF 组件上的 id

    我有一个小问题 我正在尝试在 JSF textarea 组件上使用 MartkItUp JQuery 富文本编辑器 我的表格如下所示
  • 覆盖 UserControl 中的 DependencyProperty

    我有一个 UserControl 和默认值HorizontalContentAlignment is HorizontalAlignment Stretch 在构造函数中我将其设置为HorizontalAlignment Left 当我使用
  • 带有图像的按钮?

    我正在尝试创建一个带有图像的按钮 所以基本上 我需要下面代码的button to版本 这是一篇相当老的文章 但供将来参考 从 Rails 3 2 1 开始 您可以使用button tag代替button to 因为第一个本身允许图像 例如
  • 从数据帧的每个子集中减去第一个值

    我想从数据帧的每个子集中的每个值中减去该子集中的最小值 即 A lt c 1 3 5 6 4 5 6 7 10 B lt rep 1 4 length out length A df lt data frame A B df lt df o
  • 使用 NSURLRequest 通过 POST 将键值对传递给 PHP 脚本

    我对 Objective C 相当陌生 并且希望使用 POST 将许多键值对传递给 PHP 脚本 我正在使用以下代码 但数据似乎没有被发布 我也尝试使用 NSData 发送内容 但似乎都不起作用 NSDictionary data NSDi
  • Java 8 Stream(基于资源).iterator() 自动关闭资源?

    Java 8 吗Stream iterator 完成后自动关闭流 我想不是 我有这样的事情 class Provider implements Serializable Iterator
  • 如何在 Dockerfile 中设置帐户密码?

    ENV USERNAME ros RUN adduser ingroup sudo disabled password gecos shell bin bash home home USERNAME USERNAME RUN bash c
  • pandas 查询包含由数组条目组成的列

    ykp data Out 182 state action reward 0 41 5 59 1 5 52 48 2 46 35 59 3 42 16 12 4 43 37 48 5 36 5 59 6 49 52 48 7 39 11 2
  • 滚动画布内容

    我在画布上绘制了一些文本和矩形 package com cavium test views import org eclipse swt SWT import org eclipse swt events PaintEvent import
  • 如何使用 thunk 在react-redux hooks中进行异步调用?

    我开始学习钩子 但我不明白异步调用如何正确工作 早些时候我用过 import as actionQR from actions qr function mapDispatchToProps dispatch return actionQR
  • 在asp.net core 2.1中捕获服务器端的会话超时

    我需要做点什么会议结束事件 我怎样才能参加这个活动 与此事件类似的任何事情可能会超时 ASP NET 有一个Session OnEnd您可以在 Global asax 中注册事件 但即使如此 它也非常不可靠 您只能将它用于进程内会话 并且它
  • 如何访问Azure Service Fabric有状态/无状态服务中的settings.xml?

    如何访问和读取中定义的参数PackageRoot Settings Settings xml来自我的有状态 无状态服务代码的文件 例如 我有一个带有参数 EndpointUrl 的 DocumentDbConfig 部分 section s
  • 显示成功消息,然后在超时后使用 PageFlow 重定向到另一个页面

    如何显示成功消息 然后在超时后将用户重定向到另一个页面 例如5秒 成功登录后我需要这个作为登录页面 我尝试了以下操作 我可以看到登录失败时的警告消息 但看不到登录成功时的成功消息 它立即显示目标页面 public String check
  • Amazon EC2丢失私钥,如何访问服务器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 前天我的电脑被偷了 我把我的一台服务器私钥放进去 该密钥受密码保护 所以应该没问题 但问题是现在我无法访问服务器 服务器是Ubuntu 亚马逊EC2
  • 管理到非管理开销

    在 NET 中 有几个地方必须离开托管代码并进入非托管 也称为本机代码 领域 仅举几例 外部 DLL 函数 COM调用 总是有一些关于开销的评论从一个原因跳到另一个原因 我的问题是是否有人测量了正在发生的确切开销 并可以解释如何计算它 例如
  • 是否可以将 Azure 虚拟机移动到另一个区域?

    我有一个带有非托管磁盘的 Azure VM 我想把它移到另一个地区 除了概括我当前的虚拟机之外还有其他方法吗 除了概括我当前的虚拟机之外还有其他方法吗 Azure 不支持更改 VM 的位置 您需要将 VM 的 VHD 复制到另一个位置并使用
  • 如何加载本地json文件?

    有没有办法使用 about config 配置 Firefox 以允许本地文件访问 用于演示目的 特别是使用 FF12 我需要能够对 json 数据进行本地文件访问 它在服务器上运行良好 但我想让这个演示更加便携 ajax url asse
  • 如何查看 Android 设备的屏幕状态?

    有没有办法在没有广播接收器的情况下知道Android设备屏幕是否打开 我想通过警报管理器调用的服务在设备上进行分钟间隔更新 我还想延长电池寿命 因此 如果设备屏幕打开 更新服务就会运行 我用这段代码找到了解决我的问题的方法 PowerMan
  • os.fork 和 multiprocessing.Process 之间的行为差​​异

    我有这个代码 import os pid os fork if pid 0 os environ HOME rep1 external function else os environ HOME rep2 external function