调试 python 多处理中的错误

2023-12-07

我正在使用Pool的功能multiprocessing模块以便在不同数据上并行运行相同的代码。

事实证明,我的代码在某些数据上引发了异常,但没有给出发生这种情况的精确行:

Traceback (most recent call last):
  File "my_wrapper_script.py", line 366, in <module>
    main()
  File "my_wrapper_script.py", line 343, in main
    results = pool.map(process_function, folders)
  File "/usr/lib64/python2.6/multiprocessing/pool.py", line 148, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/lib64/python2.6/multiprocessing/pool.py", line 422, in get
    raise self._value
KeyError: 'some_key'

我知道multiprocessing.log_to_stderr(),但似乎在出现并发问题时很有用,但我的情况并非如此。

有任何想法吗?


如果您使用的是足够新的 Python 版本,您实际上会看到真正的异常在该异常之前打印。例如,这是一个失败的示例:

import multiprocessing

def inner():
    raise Exception("FAIL")

def f():
    print("HI")
    inner()

p = multiprocessing.Pool()
p.apply(f)
p.close()
p.join()

使用 python 3.4 运行时出现以下异常:

multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/multiprocessing/pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "test.py", line 9, in f
    inner()
  File "test.py", line 4, in inner
    raise Exception("FAIL")
Exception: FAIL
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    p.apply(f)
  File "/usr/local/lib/python3.4/multiprocessing/pool.py", line 253, in apply
    return self.apply_async(func, args, kwds).get()
  File "/usr/local/lib/python3.4/multiprocessing/pool.py", line 599, in get
    raise self._value
Exception: FAIL

如果无法使用较新的版本,最简单的方法是将工作函数包装在 try/ except 块中,该块将在重新引发异常之前打印异常:

import multiprocessing
import traceback

def inner():
    raise Exception("FAIL")

def f():
    try:
        print("HI")
        inner()
    except Exception:
        print("Exception in worker:")
        traceback.print_exc()
        raise

p = multiprocessing.Pool()
p.apply(f)
p.close()
p.join()

Output:

HI
Exception in worker:
Traceback (most recent call last):
  File "test.py", line 11, in f
    inner()
  File "test.py", line 5, in inner
    raise Exception("FAIL")
Exception: FAIL
Traceback (most recent call last):
  File "test.py", line 18, in <module>
    p.apply(f)
  File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 244, in apply
    return self.apply_async(func, args, kwds).get()
  File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 558, in get
    raise self._value
Exception: FAIL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试 python 多处理中的错误 的相关文章

随机推荐

  • 获取州名称而不是 Woocommerce 中的代码

    我使用此处的代码向我的 woocommerce 添加了自定义状态列表 https docs woocommerce com document addmodify states 新添加的状态在前端和某些后端屏幕上加载良好 但是在电子邮件和用户
  • 按对象数组过滤 searchController

    我创建了一个 searchController 因此我尝试让它根据 UISearchController 中的文本过滤内容 我创建了一个如下所示的自定义对象 我尝试过使用 NSPredicate 但不断收到 cannot convert v
  • 每次在 getView 中视图都会膨胀。 findViewById(...) 已执行多次。我用过View Holder

    public View getView final int pos View arg1 ViewGroup arg2 ViewHolder holder View view arg1 if arg1 null holder new View
  • 如何使用 python 写回到谷歌文档电子表格中的某个单元格

    所以问题是 我从电子表格中的行的第一列 例如 A2 获取一些信息 然后我将对该信息进行一些检查 之后我想将结果写回该行的下一列 我怎么做 是否有某种功能可以让我指示后面 前面 上面 下面的列 所以我可以在该单元格中写入信息 当然 Pytho
  • python AttributeError:模块“pygame”没有属性“display”

    我开始使用 Python 特别是 pygame 模块 但是当我尝试创建一个窗口时 会发生此错误 gt gt gt import pygame gt gt gt width height 300 200 gt gt gt screen pyg
  • 另一台机器的时间

    在 C 中 当我们使用 DateTime Now 时 属性值是本地计算机的当前日期和时间 如何获取另一台具有IP地址或机器名称的机器的时间 您可以通过编写一个为您提供当前时间的服务来实现吗 或连接到远程计算机并发送一些 wmi 查询 类似问
  • OnDraw() 未触发,surfaceView 中未绘制任何内容 - Android

    你好 我在水平滚动视图中有一个 SurfaceView 我想通过 onDraw 调用来填充图像 然而 什么也没有绘制 我有一个类 其中的绘图是通过线程 CanvasThread 完成的 public class PanelChart ext
  • R read.csv - 带有特定符号(>)的标题

    当我通过 R 读取 csv 文件时 所有特定符号 gt 例如 csv 文件 用户 gt 75 R 显示用户 75 我怎样才能避免这种情况 您可以使用check names FALSE在你的read csv call From read cs
  • 索引如何提高 mongodb 中的查询性能

    我需要了解 mongo 中的索引如何提高查询性能 目前我的数据库没有索引 我如何为现有数据库建立索引 我还需要创建一个仅用于索引的新字段吗 从根本上来说 MongoDB 中的索引与其他数据库系统中的索引类似 MongoDB 支持 Mongo
  • Visual Studio NugetPackageManager 界面中的“版本”列有何意义? (与“已安装”列不同)

    已安装 列已填充 但 版本 列未填充 版本 栏是什么意思 与 已安装 列不同 我熟悉语义版本的概念 所以我确切地知道版本号的概念对于 nuget 包意味着什么 我想知道到底是什么that列于that接口意思 后续关于空白的问题结束了here
  • 蓝鸟承诺范围

    我刚刚开始使用承诺来尝试清理一些 回调地狱 我决定尝试 bluebird 并在浏览器中运行它 但立即遇到了范围界定问题 有没有办法在新的 Promise 中设置 thisArg 下面的示例显示承诺解析器内的 this 值设置为浏览器窗口 但
  • Bitmap.getPixel 始终返回黑色

    我正在创建一个应用程序 其中涉及获取屏幕部分的颜色 为此 我使用 Bitmap getPixel 方法来检索屏幕的指定像素 然后将其转换为 RGB 格式 以便以后更轻松地进行编码 问题是 当我使用 getPixel 方法时 无论屏幕上是什么
  • 使用 cygwin 在 Windows 上安装 GMP

    我是 C 新手 我必须处理大整数 所以我必须通过 Cygwin 安装 GMP 我能找到的有关安装此程序的任何文档都假设您知道自己在说什么 而我确实不知道 无论如何 我有权利 tar或者其他什么 正确提取它 现在我看到的任何网站都说要运行 c
  • 如何修复 java Apache POI 中的 NotOfficeXmlFileException?

    我正在尝试创建一个新的 Excel 文件 其中仅包含 hello 这是我的代码 import java io File import java io FileInputStream import java io FileNotFoundEx
  • 将 html 文本添加到超大 jquery 图像幻灯片

    我只想将 html 文本添加到著名的图像滑块超大的 这是他们的演示页面 http buildinternet com project supersized slideshow 3 2 demo html 该 html 可以正好位于演示中 m
  • 如何在 shell 脚本中使用远程服务器上的带有远程变量的数组?

    这就是我正在尝试做的 bin bash array local 1 2 3 4 5 ssh user server lt lt EOF index remote 1 echo index remote echo array local in
  • 什么有限状态机捕获具有相同数量的“01”和“10”的二进制字符串?

    我需要帮助设计一个有限状态机 该状态机接受包含尽可能多的模式出现的二进制字符串01作为模式的出现10 我有点很难准确理解哪些字符串应该被接受 哪些字符串应该被拒绝 欢迎任何指导 有问题的语言是什么 包含尽可能多的模式出现的二进制字符串01作
  • 如何更新 Azure 通知中心注册中的过期时间?

    我使用 Azure 通知中心已经有一段时间了 然而 我为一个新项目创建了一个新的通知中心 我注意到一些非常奇怪的行为 每当我创建一个注册时ExpirationDate被设定为12 31 9999 7 59 59 因此 对于某些人来说 我认为
  • 导入 .ics 文件时出现 Google 日历错误

    我很难让我的订阅日历与 Google 日历配合使用 以下 URL 可在 Outlook 和 Apple 日历 iCal 中正常工作 但我收到来自 Google 的错误 您提供的地址不包含有效 iCal 或 GData 格式的日历 我的 UR
  • 调试 python 多处理中的错误

    我正在使用Pool的功能multiprocessing模块以便在不同数据上并行运行相同的代码 事实证明 我的代码在某些数据上引发了异常 但没有给出发生这种情况的精确行 Traceback most recent call last File