python 多处理守护进程中的僵尸进程

2023-11-22

在研究了 python 守护进程之后,这个演练似乎是最可靠的:http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

现在我试图在守护进程类中实现一个工作池,我相信它正在工作(我没有彻底测试代码),除了在关闭时我得到一个僵尸进程。我已经读过我需要等待孩子的返回代码,但我只是不知道我需要如何做到这一点。

以下是一些代码片段:

def stop(self):
    ...
    try:
        while 1:
            self.pool.close()
            self.pool.join()
            os.kill(pid, SIGTERM)
            time.sleep(0.1)
    ...

这里我尝试过os.killpg以及一些os.wait方法但没有改善。我也玩过closing/joining之前和之后的泳池os.kill。这个循环就目前而言,永远不会结束,一旦到达os.kill我得到一个僵尸进程。self.pool = Pool(processes=4)发生在__init__守护进程的部分。来自run(self)这是在之后执行的start(self), 我会打电话self.pool.apply_async(self.runCmd, [cmd, 10], callback=self.logOutput)。然而,我想在研究这个问题之前先解决这个僵尸进程。

如何在守护进程内正确实现池以避免出现僵尸进程?


如果不知道子进程/守护进程进程中发生了什么,就不可能对答案有 100% 的信心,但请考虑是否可能是这样。由于子进程中有工作线程,因此实际上需要构建一些逻辑,以便在收到 SIGTERM 后加入所有这些线程。否则,您的进程可能无法退出(即使退出,您也可能无法正常退出)。为此,您需要:

  • 编写一个信号处理程序,用于捕获 SIGTERM 信号并为主线程触发事件的子/守护进程
  • 在子/守护进程的主线程中安装信号处理程序(非常重要)
  • SIGTERM 的事件处理程序必须向子进程/守护进程中的所有线程发出停止指令
  • 所有线程完成后都必须进行 join()ed(如果您假设 SIGTERM 会自动销毁您可能必须实现此逻辑的所有内容)
  • 一旦所有内容都加入并清理完毕,您就可以退出主线程

如果您有用于 I/O 和各种事情的线程,那么这将是一件真正的苦差事。

另外,我通过实验发现,当您使用信号处理程序时,事件侦听器的特定策略很重要。例如,如果使用 select.select(),则必须使用超时,如果发生超时则重试;否则你的信号处理程序将不会运行。如果您有一个用于事件的 Queue.Queue 对象,并且您的事件侦听器调用其 .get() 方法,则必须使用超时,否则您的信号处理程序将不会运行。 (在虚拟机中用 C 实现的“真正的”信号处理程序会运行,但 Python 信号处理程序不会运行,除非您使用超时。)

祝你好运!

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

python 多处理守护进程中的僵尸进程 的相关文章

  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • 使用 React、Redux 和 Axios 处理异步请求?

    我是 React JS 和 Redux 的新手 这让我难以上手 我正在尝试使用 Axios 发出 POST 请求 但无法发出请求 可能是我在容器文件中丢失了一些东西 下面是代码 查看plnkr Update 提交后我收到 redux for
  • 将列表与公共元素合并

    我有一个清单 1 1 7 2 1 10 11 12 211 446 469 3 1 10 11 12 13 4 1 11 12 13 215 5 1 15 16 6 1 15 17 216 225 我想合并具有公共元素的列表切片 并索引已合
  • 红宝石浮点精度

    据我了解 Ruby 1 9 2 浮点数的精度为 15 位十进制数字 因此 我期望舍入浮动x精确到小数点后 15 位等于x 对于此计算 情况并非如此 x 0 33 10 x x round 15 gt false 顺便说一下 四舍五入到 16
  • 在 iOS7 GM 中收到 SSL 错误 - “AddTrust 外部 CA 根”不受信任?

    我的 NSURLConnection 类中突然收到来自 iOS7 GM 的 SSL 错误 我无法访问我的任何 API 或 webView 页面 这是一个严重的紧急情况 有人可以帮我吗 错误如下 NSURLConnection CFURLCo
  • 使用事件侦听器克隆引导元素

    我正在尝试克隆一个具有引导程序提供的数据切换行为的引导程序元素 HTML div class container div
  • 我需要帮助使用 MAT 查找内存泄漏

    我正在使用 MAT 来比较两个堆转储 我每天都会进行一次堆转储 它每天都会增加大约 200 兆 我认为泄漏与 java util zip 有关 因为该表显示的内容 也因为我们最近添加了一个新进程来压缩和解压缩大量文件 见图 此时我打开支配器
  • iPhone 上的 HTTP 直播流媒体服务器

    我正在尝试在 iPhone 上运行 HTTP 实时流媒体服务器 该服务器从摄像头捕获视频流并将其提供给 HTML5 客户端 支持 HTTP 实时流媒体 到目前为止 我已经完成了以下工作 iOS 上的 HTTP Live 流媒体服务器 用 N
  • Ext 4.1.1:添加新记录到Store

    我想在商店初始化后添加记录 I tried 加载数据 加载原始数据 add 但似乎没有任何作用 这是我的jsfiddle http jsfiddle net charlesbourasseau zVvLc 有任何想法吗 你需要设置query
  • novalidate 并出现错误 ora-02299

    有人可以帮我解决这个问题吗 id Name 1 aaa 2 bbb 3 aaa gt alter table arc add CONSTRAINT uk arc UNIQUE NAME novalidate error ora 02299
  • 控制 HTML5 视频中的开始位置和播放时长

    我们有一个视频 长 13 分钟 我们希望使用 HTML5 对其进行控制 我们希望能够让用户控制和选择他们想要播放的视频部分 优选地 该控制将通过2个输入字段进行 他们将在第一个框中输入开始时间 以秒为单位 并在第二个框中输入播放持续时间 以
  • Haxe 在 PHP 环境中部署的 Web“框架”?

    最近我一直在看Haxe 构建要部署到运行 PHP 的 Apache 的应用程序 好吧 虽然它看起来可能适合我的需求 部署到 PHP 但不使用糟糕的语言 但我还没有发现任何东西可以使实际应用程序开发比构建传统的非 MVC PHP 应用程序更容
  • Angular 构建:无法读取未定义的属性“split”

    刚刚从 ng8 升级到 ng11 当我运行 ngserve 时它工作正常 但是当我运行 build 进行生产时我收到以下错误 生成 ES5 包以进行差异加载 发生未处理的异常 C P src app 9 es2015 dce42a686e4
  • CUDA 10 不支持 7 之后的 Gcc 版本 - Arch Linux 中的 Qt 错误

    我正在运行 Arch Linux 并尝试在 Qt 中构建一个项目 但是 Qt 出现以下错误 opt cuda include crt host config h 129 错误 error 不支持的 GNU 版本 不支持 7 之后的 gcc
  • 以“TryParse”方式反序列化 json

    当我向某个服务 不属于我 发送请求时 它可能会响应所请求的 JSON 数据 或者响应如下所示的错误 error status error message code 999 在这两种情况下 HTTP 响应代码都是 200 OK 因此我无法使用
  • 带有 ViewPager 的 CollapsingToolbarLayout

    我正在尝试使用 CollapsingToolbarLayout 来创建一个带有 ViewPager 的可折叠工具栏 该工具栏在向上滚动时会逐渐消失 但如果 ViewPager 存在 我似乎会失去向上滚动的能力 ViewPager 应该在工具
  • Google oauth2 api 客户端无法正常工作

    我的 grails 2 3 4 控制器的操作中有一些代码 它使用 google java 客户端库来访问 OAuth2 api 但是当我创建 GoogleAuthorizationCodeFlow 的实例时 我收到了 redirect ur
  • WCF:EncryptedKey 子句未包含所需的加密令牌“System.IdentityModel.Tokens.X509SecurityToken”

    我正在尝试使用 WCF 客户端连接到基于 Java 的 Web 服务 我提供的证书 自签名 在 SOAPUI 中完美运行 这是我的设置 但是 我在使用 WCF 客户端时遇到问题 My 应用程序配置
  • Google App Script Web 应用程序 GET 和 POST 请求被 CORS 策略阻止

    我创建了一个 Google Web 脚本应用程序 它将用户的姓名和电子邮件添加到电子表格中 当直接在浏览器中访问网页时 此方法工作正常 但来自网站的 GET 和 POST 请求都会返回错误 Access to fetch at https
  • 创建 spring 批处理 bean 时获取“范围‘步骤’对于当前线程不活动”

    在我的 Spring 批处理配置中 我尝试设置一个分区步骤 该步骤访问 JobParameters 中的值 如下所示 Bean Qualifier partitionJob public Job partitionJob throws Ex
  • python 多处理守护进程中的僵尸进程

    在研究了 python 守护进程之后 这个演练似乎是最可靠的 http www jejik com articles 2007 02 a simple unix linux daemon in python 现在我试图在守护进程类中实现一个