在多处理中出现异常时,我是否需要手动调用 pool.terminate ?

2024-04-28

看来以下两个片段具有相同的行为:

def sqr(a):
    time.sleep(1.2)
    print 'local {}'.format(os.getpid())
    if a == 20:
        raise Exception('fff')
    return a * a

pool = Pool(processes=4)

A:

try:
    r = [pool.apply_async(sqr, (x,)) for x in range(100)]

    pool.close()

    for item in r:
        item.get(timeout=999999)

except:
    pool.terminate()
    raise

finally:
    pool.join()


print 'main {}'.format(os.getpid())

B:

r = [pool.apply_async(sqr, (x,)) for x in range(100)]

pool.close()

for item in r:
    item.get(timeout=999999)

pool.join()

最初我想如果我不这样做terminate,即使主进程退出,所有其他进程也会在后台运行。但我查了一下htop一旦发生异常,所有子进程似乎都会退出。


你打电话时pool.close() https://docs.python.org/2.7/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool.close,你告诉的是Pool不会再向其发送更多任务。这允许它在当前任务队列处理完成后立即关闭其工作进程 - 没有明确的terminate()需要打电话。文档中提到了这一点:

close()

防止将更多任务提交到池中。一旦所有任务完成,工作进程将退出。

请注意,任务是否成功完成或抛出异常并不重要;不管怎样,任务就完成了。

此外,所有工作进程Pool开始于daemon=True https://docs.python.org/2.7/library/multiprocessing.html#multiprocessing.Process.daemon,这意味着一旦父进程准备退出,它们就会被终止。在你的情况下,你打电话get()在正在处理的每个项目上,这将导致在子级中引发的异常在父级中重新引发。当这种情况发生时,父进程退出,这会自动终止所有工作进程。

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

在多处理中出现异常时,我是否需要手动调用 pool.terminate ? 的相关文章

  • 导入错误:无法导入名称“PandasError”

    我对在 Mac 上运行的 Python 3x 非常陌生 当前使用 python 金融的 senddex 教程 尝试运行以下脚本 import datetime as dt import matplotlib pyplot as plt fr
  • 通过 rpy 将 SPSS 文件(.sav)导入 pandas 时如何保留标签?

    我正在寻找使用 SPSS 文件 sav pandas 在没有 SPSS 程序的情况下 典型文件转换为 csv 后的样子如下 在调查前两行的含义时 我不知道 SPSS 似乎第一行包含Labels 而第二行包含VarNames 当我将文件带入
  • 用定点迭代求解该方程

    我怎样才能解这个方程 x3 x 1 0 使用定点迭代 有没有定点迭代我可以在网上找到代码 尤其是Python 吗 Using scipy optimize fixed point http docs scipy org doc scipy
  • Python gdal 未定义符号 GDALRasterBandGetVirtualMem

    我正在尝试使用Python GDAL 绑定 https pypi python org pypi GDAL 通过 pip 天真地安装绑定时 安装失败并显示错误 VSIFTruncateL 未在此范围内声明 https gis stackex
  • argparse 更改参数的定义

    我按如下方式设置参数解析器 parser argparse ArgumentParser parser add argument point help enter a point e g 2 3 4 parser parse args po
  • 参数太少错误,同时未使用参数占位符

    我尝试使用 PYODBC 在 Access 数据库中执行 SQL 查询 但出现以下错误 pyodbc Error 07002 07002 Microsoft ODBC Microsoft Access 驱动程序 参数太少 预期为 1 301
  • 将 pandas 多索引数据帧转换为嵌套字典

    我有一个 pandas 多索引数据框 我试图将其输出为嵌套字典 create the dataset data clump thickness 0 0 274 0 0 1 19 0 1 0 67 0 1 1 12 0 2 0 83 0 2
  • 更新或插入 MySQL Python

    如果记录已存在 我需要更新一行 如果不存在 我需要创建一个新记录 我理解 ON DUPLICATE KEY 将使用 MYSQLdb 完成此操作 但是我无法使其正常工作 我的代码如下 cursor database cursor cursor
  • 将 Selenium 与 PyCharm CE 结合使用

    我正在尝试将 Selenium 与 PyCharm CE 一起使用 我已经使用 pip install Selenium 安装了 Selenium 并且可以通过终端使用它 但是当我尝试将它与 PyCharm 一起使用时 出现导入错误 Imp
  • 如何在Python中获取套接字的外部IP?

    当我打电话时socket getsockname 在套接字对象上 它返回我的机器的内部 IP 和端口的元组 但是 我想找回我的外部IP 最便宜 最有效的方式是什么 如果没有外部服务器的配合 这是不可能的 因为您和另一台计算机之间可能存在任意
  • 当我移动我的 pygame 角色时,它会留下痕迹[重复]

    这个问题在这里已经有答案了 我一直在尝试用 Python 制作一个游戏 但是当我移动我的角色时 它会留下痕迹 我知道它并没有显示出那么多 但如果你靠近的话 你可以看到这条踪迹 这真的让我很困扰 这是我的代码 import pygame im
  • 在 grpc python 中处理异步流请求

    我试图了解如何使用双向流处理 grpc api 使用 Python API 假设我有以下简单的服务器定义 syntax proto3 package simple service TestService rpc Translate stre
  • Python:如何对数组 X 进行排序,但对 Y 进行相同的相对排序?

    例如 X 5 6 2 3 1 Y 7 2 3 4 6 我对X进行排序 X 1 2 3 5 6 但我希望对 Y 应用相同的相对排序 以便数字保持与以前相同的相对位置 Y 6 3 4 7 2 我希望这是有道理的 通常 你会做一个zip sort
  • 使用条件在 pandas 数据框中生成新列

    我有一个 pandas 数据框 如下所示 portion used 0 1 1 0 1 2 0 3 2 3 0 0 3 4 0 8 我想根据以下内容创建一个新专栏used列 以便df看起来像这样 portion used alert 0 1
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 使用枚举名称而不是值对 Pydantic 字段进行编码

    我有一个枚举类 class Group enum Enum user 0 manager 1 admin 2 我有一个 pydantic 模型 class User BaseModel id int username str group G
  • 使用 pyspark 计算所有可能的单词对

    我有一个文本文档 我需要找到整个文档中重复单词对的可能数量 例如 我有下面的word文档 该文档有两行 每行用 分隔 文档 My name is Sam My name is Sam My name is Sam My name is Sa
  • 如何测试send_file烧瓶

    我有一个小型烧瓶应用程序 它需要上传一些图像并将它们转换为多页 tiff 没什么特别的 但是如何测试多个文件的上传和文件下载呢 我的测试客户端 class RestTestCase unittest TestCase def setUp s
  • 捕获 SQLAlchemy 异常

    我可以使用什么捕获 SQLAlechmy 异常的上层异常 gt gt gt from sqlalchemy import exc gt gt gt dir exc ArgumentError CircularDependencyError
  • Pandas:如何删除以 nan 作为列名的多个列?

    根据标题 这是一个可重现的示例 raw data x this that this that this np nan np nan np nan np nan np nan np nan y np nan np nan np nan np

随机推荐

  • 如何从 ext2/ext3 文件系统上的稀疏文件中删除一些块

    当您写入稀疏文件时 ext2 ext3 文件系统会自动分配块 但是当我不再需要其中的某些块时 我发现没有办法做到这一点 感觉就像使用 malloc 而不使用 free 是否可以 释放 稀疏文件的某些块 如果是的话 怎么样 不要告诉我将其复制
  • 本地/离线网站“站点”的全文搜索[重复]

    这个问题在这里已经有答案了 可能的重复 通过 javascript 对 CD Rom 上的静态 HTML 文件进行全文搜索 https stackoverflow com questions 1357173 full text search
  • JavaScript 中的“onclick”和“this”

    我很困惑 为什么内联onclick我们要写onclick hello 而在JS中我们应该写btn onclick hello或者btn addEventListener click hello 对于常规函数 为什么在内联onclick中 t
  • 如何在实体框架中进行“in”查询?

    如何在 linq toEntity 中进行选择以从列表中选择带有键的行 像这样的东西 var orderKeys new int 1 12 306 284 50047 var orders from order in context Ord
  • 创建 JPA 提供者

    有谁知道如何创建自己的 JPA 提供程序 我正在考虑制作一个自定义 JPA 提供程序 它可以与我们使用的 SOAP Web 服务交互 但是 我似乎找不到任何描述如何创建自己的 JPA 提供程序的文档 我应该从哪里开始寻找 你首先要实施jav
  • Postgres 在插入访问 NEW 后触发

    我有一个非常简单的触发器 CREATE OR REPLACE FUNCTION f log datei RETURNS TRIGGER AS BEGIN INSERT INTO logs aktion tabelle benutzer id
  • 何时使用 STRef 或 IORef?

    STRef 和 IORef 之间到底有什么区别 何时使用它们 据我所知 它们都是可变状态 那么它们存在的意义是什么 您可以在其中做更多事情IO单子比ST单子 后者提供可变引用 前者提供可变引用 异常捕获 线程 当然还有IO 使用可以解决问题
  • MVC Action Filters 使用传递给 ActionResult 的参数?

    我创建了一个自定义动作过滤器 http www asp net mvc tutorials older versions controllers and routing understanding action filters cs没有问题
  • 如何向 JFrame 添加多个组件?

    我有一个JFrame 我也有一个Box扩展的类成分 这个盒子类有一个paint制作填充矩形的方法 当我将多个 Box 组件添加到 JFrame 时 当我调用时仅显示最近添加的一个repaint在 JFrame 上 我查看了布局管理器 但我不
  • 如何使用 Swing GUI 启动 Java MVC 应用程序

    假设我们有一个简单的 Java MVC 应用程序 其中包含以下类Model View and Controller The View类直接继承自JFrame http docs oracle com javase 7 docs api ja
  • Bean定义继承带有注解?

    是否可以使用基于注释的配置来实现相同的bean继承 Bean etc
  • 提高 apache 日志的精度以包括毫秒

    我修改了配置rsyslogd禁用RSYSLOG TraditionalFileFormat 但仍然是apache日志 var log apache error log仅显示第二精度 还有什么需要配置的吗 At http httpd apac
  • 为视频添加水印的命令

    我尝试在一个视频上添加水印 但 FFmpeg 命令不会执行 错误代码为 3037 我运行相同的代码来修剪视频 视频已成功修剪 因此没有问题inputpath or outputpath我也有ic watermark png在资产文件夹中 我
  • PHP7下如何安装mcrypt? Laravel 需要它

    由于 Laravel4 需要mcrypt扩展名 而PHP7好像没有mcrypt扩展 有什么解决方法可以解决这个问题吗 有同样的问题 PHP7 缺少 mcrypt 这对我有用 当询问时 保留本地 PHP 配置文件 sudo apt get u
  • 在 Xcode 12.0 中通过 Carthage 引入 iOS 框架

    我正在使用 Xcode 12 0 和 Carthage 0 35 0 当我这样做时Carthage bootstrap platform iOS or Carthage update platform iOS no use binaries
  • Tkinter:固定尺寸框架中的中心标签?

    我正在尝试创建一个固定大小的框架并在中心放置一个文本标签 我不知道为什么这不起作用 我希望框架位于主框架的左上角 因此指定了 NW 并且效果很好 但改变标签的粘贴方向没有任何作用 感谢帮助 self f Frame self master
  • iOS:“__connection_block_invoke_2 中出现错误:连接中断”,但应用程序仅使用 < 20 MB 内存

    一个只有一个视图控制器的简单应用程序 仅加载 5 行文本 会生成以下错误 error in connection block invoke 2 Connection interrupted 这个帖子 https stackoverflow
  • TESTNG 无法在类路径中找到类问题

    我们正在将 testng 与我们的应用程序集成 我为 ant build 创建了 testng xml 和 testngbuild xml 运行 ant build 时 它抛出 Cannot find class in classpath
  • R从原始数据生成二维直方图

    我有一些 2D x y 的原始数据 如下所示 我想从数据生成二维直方图 通常 将 x y 值划分为大小为 0 5 的 bin 并计算每个 bin 中出现的次数 同时针对 x 和 y 有什么办法可以做到这一点吗 gt df x y 1 4 2
  • 在多处理中出现异常时,我是否需要手动调用 pool.terminate ?

    看来以下两个片段具有相同的行为 def sqr a time sleep 1 2 print local format os getpid if a 20 raise Exception fff return a a pool Pool p