python多进程服务高可用

2023-11-17

目的

多进程服务高可用目的暂定为两个:

  1. 任务超时(计算超时,或者内部死锁),会出现timeout,任务计算失败。
  2. 子进程挂掉(比如动态基线卡爆子进程, 手动kill -9子进程),主进程会重新启用子进程,并分配任务。丢失的任务,可以从日志中看到

高可用暂不支持:

  1. 暂不支持任务回收,即丢失的任务重新计算

不支持任务回收因为不确定子进程何时会挂掉,所以对子进程爆掉时的任务难处理

实现方式:

  1. 子进程挂掉使用multiprocess里的pool的机制:若主进程接到任务,则使用pool.apply_async产生子进程并计算;若进程卡死,则pool会自动创建新的子进程
  2. 超时机制为:在子进程里使用signal.alarm函数,对子进程状态进行监控

出现的问题

在pool中,子进程挂掉后,新启用的子进程不能工作

尝试思路

  1. 根据系统级别日志出现的segfault,尝试修复打包环境,修复环境后未解决问题
  2. 尝试使用主进程监控子进程的形式,尝试实现高可用,结果为:mac好用,Linux不好用
  3. 尝试修改超时监控策略,结果不好用
  4. 尝试修改进程启动策略,结果不好用
  5. 使用gdb调试不工作进程,进展为:认为可能存在死锁问题

问题产生原因:

  1. 子进程使用logging时,拷贝上下文时,会把主进程的锁拷贝进来,但此时主进程可能并没有release掉,因此在子进程acquire锁时,获取不到主进程的锁,最终产生死锁,导致子进程不工作

问题解决方式:

  1. 在子进程使用logging之前,删除继承过来的logging处理器(此时删除掉了继承过来的锁),并重新创建处理器。
  2. logging.config.dictConfig 肯定存在bug,避免在子进程中使用logging.config.dictConfig函数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python多进程服务高可用 的相关文章

随机推荐

  • JS String 字符串方法

    1 charAt 方法从一个字符串中返回指定的字符 var anyString Brave new world console log anyString charAt 0 B console log anyString charAt 1
  • 移动端自动化测试实战

    UI自动化测试的价值 1 提升回归测试的效率 2 可以进行兼容性测试 UI 自动化测试应用场景 冒烟测试自动化 提测之前自动断言提测质量 提供准入参考 功能测试自动化 辅助 QA 与测试工程师的快速验证 验收测试自动化 兼容性测试等 移动端
  • Markdown 语法完全指南

    这里写目录标题 简介 1 标题 2 段落和换行 3 文本样式 粗体和斜体 删除线和代码 嵌套标记 4 链接 内联链接 引用链接 5 列表 无序列表 有序列表 嵌套列表 任务列表 6 引用块 7 插入图片 8 水平线 9 代码块 10 表格
  • MySQL 的优化方案总结

    性能优化 Optimize 指的是在保证系统正确性的前提下 能够更快速响应请求的一种手段 而且有些性能问题 比如慢查询等 如果积累到一定的程度或者是遇到急速上升的并发请求之后 会导致严重的后果 轻则造成服务繁忙 重则导致应用不可用 它对我们
  • 如何使用命令实现在达梦数据库里修改表的某个字段

    达梦数据库里当字段长度太小的时候 在应用程序里会出现这样的报错 列 XXXX 长度超出定义 说明当前要存储的内容跟设定的字段长度是不匹配的 很明显这样的问题是要调整字段长度的的 定位到列所在的表 就可以通过达梦sql脚本去修改这个字段的长度
  • 【Xilinx】Spartan 7上手指南(ARTY S7开发板)

    Spartan 7上手指南 一 安装board文件 1 下载并解压板卡压缩文件 2 复制到Vivado安装目录 二 demo工程 1 下载demo 2 修改tcl 3 恢复工程 4 生成bit 三 调试运行 1 连接电脑 2 设置串口 3
  • 分布式应用:Zabbix 自动发现与自动注册

    目录 一 理论 1 Zabbix 自动发现 2 Zabbix 自动发现部署 3 Zabbix 自动注册 4 Zabbix 自动注册部署 二 实验 1 Zabbix 自动发现部署 2 Zabbix 自动注册部署 三 总结 一 理论 1 Zab
  • 浅谈前端单元测试

    首先声明一点 长期以来 前端开发的单元测试并不是在前端的开发过程中所必须的 也不是每个前端开发工程师所注意和重视的 甚至扩大到软件开发过程中单元测试这一环也不是在章程上有书面规定所要求的 但是随着每个工程的复杂化 代码的高复用性要求和前端代
  • MySql设置唯一标识主键等设置

    建立表 create table user score name char 10 not null default score smallint not null default 0 增加一列 alter table user score
  • 【简单】阶乘之和

    描述 给定n的值 求Sn 1 2 3 4 5 n 之值 但Sn可能很大 因此只要求出Sn关于100007的余数 输入 输入数据有多组 每组占一行 每行一个正整数n n lt 1000 输出 每组输出一个整数 即Sn Mod 100007 样
  • 自动化测试用例设计实例

    在编写用例之间 笔者再次强调几点编写自动化测试用例的原则 1 一个脚本是一个完整的场景 从用户登陆操作到用户退出系统关闭浏览器 2 一个脚本脚本只验证一个功能点 不要试图用户登陆系统后把所有的功能都进行验证再退出系统 3 尽量只做功能中正向
  • 2022年全新Java学习路线图,含源码+笔记

    简洁版本Java学习路线 Java SE基础 gt Java Web gt Maven gt Git gt SSM框架 gt MybatisPlus gt Spring Boot gt 传智健康 医疗行业 gt Spring Cloud g
  • TLS 安全设置未设置为默认设置,这也可能导致此错误。

    edge浏览器打开网页时打示 TLS 安全设置未设置为默认设置 这也可能导致此错误 如图 此时可以通过启用TLS功能处理该问题 控制面板 Internet选项 高级 如图 启用TLS功能后刷新页面或重启浏览器 之后就不会提示之前的报错了
  • ctfshow-萌新-web1( 利用intval函数的特性获取敏感数据)

    ctf show 萌新模块的web1关 这一关考察的是intval 函数转换字符串时的特性以及SQL的拼接绕过 这一关直接就给了源码 并提示我们 id 1000 时 就是flag 先分析一下源码 首先是 intval 函数将参数id转换为数
  • Educoder---计算机系统基础-----计算机系统2.1测试

    1 5 B C A D C 6 10 D C B C B 10题讲解过程 在8位寄存器中存放补码表示的数0FEH 算术左移一位后 其十六进制代码是 A 0FFH B 0FCH C 7CH D 7EH 我是谁 a student a skat
  • 43_iPhone如何查看idfa

    今天工作时 需要帮一位同事查看iPhone的idfa 然后通过idfa做一些定向操作 网上查了十几分钟 一直没有找到合适的方法 最后找到一个对我来说非常简单的方法 很快就找到了我们需要的idfa 在这里记录一下思路 并不做详细解释 懂的人自
  • 【第10篇】MobileNets:用于移动视觉应用的高效卷积神经网络

    MobileNets 用于移动视觉应用的高效卷积神经网络 文章目录 MobileNets 用于移动视觉应用的高效卷积神经网络 摘要 一 简介 二 前期工作 三 MobileNet 架构 3 1 深度可分离卷积 3 2 网络结构和训练 3 3
  • Python爬虫,京东自动登录,在线抢购商品

    京东抢购 Python爬虫 自动登录京东网站 查询商品库存 价格 显示购物车详情等 可以指定抢购商品 自动购买下单 然后手动去京东付款就行 chang log 2017 03 30 实现二维码扫码登陆 2017 06 27 Golang版J
  • 飞哥送书第二期:充能书单|618,买什么都不如买知识!

    您好 我是码农飞哥 wei158556 感谢您阅读本文 欢迎一键三连哦 1 Python基础专栏 基础知识一网打尽 9 9元买不了吃亏 买不了上当 Python从入门到精通 2 毕业设计专栏 毕业季咱们不慌忙 几百款毕业设计等你选 3 Py
  • python多进程服务高可用

    python多进程服务高可用 目的 实现方式 出现的问题 尝试思路 问题产生原因 问题解决方式 目的 多进程服务高可用目的暂定为两个 任务超时 计算超时 或者内部死锁 会出现timeout 任务计算失败 子进程挂掉 比如动态基线卡爆子进程