Python 多处理:如何在错误后干净地退出?

2024-02-01

我正在编写一些使用的代码multiprocessing模块。然而,由于我是新手,经常发生的情况是弹出一些错误,导致主应用程序停止运行。

但是,该应用程序的子级仍然保持运行,并且我得到一长串正在运行的列表pythonw我的任务管理器列表中的进程。

发生错误后,我该怎么做才能确保所有子进程也被杀死?


这个难题有两部分。

  1. 如何检测并杀死所有子进程?
  2. 我怎样才能尽最大努力确保在一个进程终止时运行第 1 部分中的代码?

对于第 1 部分,您可以使用multiprocessing.active_children() https://docs.python.org/2/library/multiprocessing.html#miscellaneous获取所有活跃孩子的列表并杀死他们Process.terminate()。注意使用Process.terminate()带有通常的警告。

from multiprocessing import Process
import multiprocessing

def f(name):
    print 'hello', name
    while True: pass

if __name__ == '__main__':
    for i in xrange(5):
        p = Process(target=f, args=('bob',))
        p.start()

    # At user input, terminate all processes.
    raw_input("Press Enter to terminate: ")
    for p in multiprocessing.active_children():
       p.terminate()

第 2 部分的一种解决方案是使用sys.excepthook,如中所述这个答案 https://stackoverflow.com/a/6598286/391161。这是一个组合示例。

from multiprocessing import Process
import multiprocessing
import sys
from  time import sleep

def f(name):
    print 'hello', name
    while True: pass

def myexcepthook(exctype, value, traceback):
    for p in multiprocessing.active_children():
       p.terminate()

if __name__ == '__main__':
    for i in xrange(5):
        p = Process(target=f, args=('bob',))
        p.start()
    sys.excepthook = myexcepthook

    # Sleep for a bit and then force an exception by doing something stupid.
    sleep(1)
    1 / 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 多处理:如何在错误后干净地退出? 的相关文章

  • 适用于 python2.7 谷歌应用引擎的云任务 API

    我在 Google App Engine Python 2 7 下创建了一个项目 我使用创建了一些任务queue yaml并与部署glcoud命令 当我转到 任务队列 部分下的 Google App Engine 控制台时 它会重定向到 云
  • Pycharm 中的 Traitlets.traitlets.TraitError

    我是Python的初学者 我面临以下问题 每当我启动 pycharm 社区版 版本 5 0 3 时 Python 控制台无法启动并显示以下错误 usr bin python2 7 usr lib pycharm community help
  • Windows 7 64位 libsvm 和 python 错误:找不到函数“svm_get_sv_indices”

    我正在使用 Windows 7 64 位 我已经安装了 Python 2 7 3 32 位版本 和 libsvm 3 13 当我尝试启动导入 svmutil 的简单 py 文件时 出现错误 C libsvm 3 13 python gt p
  • python-messaging 无法处理 HTTP 请求

    我正在使用下面的代码尝试使用 python messaging 发送彩信https github com pmarti python messaging blob master doc tutorial mms rst https gith
  • python 根据日期创建目录结构

    我使用以下函数根据今天的日期创建目录 usr bin python import time datetime os today datetime date today todaystr today isoformat os mkdir to
  • 按键合并的两个字典的值的并集

    我有两本词典 d1 a x y b k l d2 a m n c p r 如何合并这两个字典以获得这样的结果 d3 a x y m n b k l c p r 当字典的值是简单类型 如 int 或 str 时 这有效 d3 dict i a
  • Django Python - LDAP 身份验证

    我目前正在研究 Django Python 我的目标是从 Ldap 目录对用户进行身份验证 我确实有 python 代码来访问 ldap 目录并检索信息 Code import ldap try l ldap open ldap forum
  • Tornado 和 WTForms

    我是第一次使用 WTForms 使用 WTForms 验证 Tornado 中的 POST 请求 以下是我的表格 表格 py class UserForm Form user TextField user validators Length
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • 类型错误:不支持的类型

    我需要在 GPU 中运行代码的某些部分cupy代替numpy 所以 我只对这一行做了评论 import numpy as np并用这一行代替它import cupy as np 完整代码 from imutils video import
  • 如何在欧洲使用 Cloud Dataflow 区域终端节点?

    是否可以将 Google Cloud Platform Dataflow 作业的区域更改为欧洲 我已将管道区域设置为europe west1 d但我无法更改工作本身的区域 我尝试更改管道选项中的区域 但这会导致错误 并且只有默认区域有效 p
  • 为什么 `Pool.map()` 多处理中的内存消耗急剧增加?

    我正在对 pandas 数据帧进行多重处理 方法是将其拆分为多个数据帧 这些数据帧存储为列表 并且 使用Pool map 我将数据帧传递给定义的函数 我的输入文件约为 300 mb 因此小数据帧大约为 75 mb 但是 当多处理运行时 内存
  • 根据三列中的值组织行

    导入并获取数据集import numpy as np import matplotlib pyplot as plt import pandas as pd df pd DataFrame DaysExperienceTask 7 8 2
  • Python argparse:需要两个并存的位置参数

    使用 argparse 如何指定我希望两个位置参数一起出现或根本不出现 IE 我希望我的使用字符串看起来像 Usage FooBar py h FOO BAR 正如 hpaulj 所建议的 这是您可以使用的解决方案 In 1 import
  • MAMP Python-MySQLdb 问题:调用 Python 文件后 libssl.1.0.0.dylib 的路径发生变化

    我正在尝试使用 python MySQLdb 访问 MAMP 服务器上的 MySQL 数据库 当我最初尝试使用 python sql 调用 Python 文件来访问 MAMP 上的数据库时 我得到了image not found关于错误li
  • IndexError:布尔索引与维度 0 上的索引数组不匹配

    在我将 Numpy 更新到 1 13 1 之前 我的代码工作正常 现在我收到以下错误 IndexError boolean index did not match indexed array along dimension 0 dimens
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 如何将回溯/sys.exc_info() 值保存在变量中?

    我想将错误名称和回溯详细信息保存到变量中 这是我的尝试 import sys try try print x except Exception ex raise NameError except Exception er print 0 s
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存

随机推荐