用multiprocessing.Pool处理Ctrl+C/SIGINT的正确方法是:在创建进程Pool之前,使进程忽略SIGINT。这样创建的子进程继承SIGINT处理程序。

创建Pool之后,还原父进程中的原始SIGINT处理程序。

使用map_async和apply_async而不是阻塞map和apply。

等待超时的结果,因为默认的阻塞等待忽略所有信号。这是Python错误https://bugs.python.org/issue8296。

总而言之:#!/bin/env python

from __future__ import print_function

import multiprocessing

import os

import signal

import time

def run_worker(delay):

print("In a worker process", os.getpid())

time.sleep(delay)

def main():

print("Initializng 2 workers")

original_sigint_handler = signal.signal(signal.SIGINT, signal.SIG_IGN)

pool = multiprocessing.Pool(2)

signal.signal(signal.SIGINT, original_sigint_handler)

try:

print("Starting 2 jobs of 5 seconds each")

res = pool.map_async(run_worker, [5, 5])

print("Waiting for results")

res.get(60) # Without the timeout this blocking call ignores all signals.

except KeyboardInterrupt:

print("Caught KeyboardInterrupt, terminating workers")

pool.terminate()

else:

print("Normal termination")

pool.close()

pool.join()

if __name__ == "__main__":

main()

正如@YakovShklarov所指出的,从忽略信号到在父进程中忽略它之间有一段时间,在此期间信号可能会丢失。使用pthread_sigmask代替在父进程中临时阻止信号的传递将防止信号丢失,但是,在Python-2中不可用。

python捕获信号退出_Python捕获信号退出Python中的捕获Ctrl+C/SIGINT,优雅地退出多个进程,python,在,CtrlCSIGINT,并...相关推荐

  1. qt如何捕获应用程序输出_企业应用程序中需要捕获的5大Java性能指标

    qt如何捕获应用程序输出 有兴趣了解如何使用AppDynamics捕获这些Java性能指标吗? 立即开始免费试用 ! 前几篇文章介绍了应用程序性能管理(APM),并指出了有效实施APM战略的挑战. 本 ...

  2. python 数据框缺失值_Python:处理数据框中的缺失值

    python 数据框缺失值 介绍 (Introduction) In the last article we went through on how to find the missing value ...

  3. python配置文件密码管理_python – 可以在django管理员中实现“下次登录时更改密码”类型功能吗?...

    我其实正在这样做的过程中.您需要三个组件:用户配置文件(如果您的站点上尚未使用),中间件组件和pre_save信号. 我的代码是在一个名为"帐户"的应用程序. # myprojec ...

  4. python图片目标检测_python+opencv实现目标检测中图片怎么插入

    匿名用户 1级 2018-04-17 回答 考虑的是"背景帧"与其它帧之间的差异 这种方法检测结果还是挺不错的,但是需要提前设置背景帧,如果是在室外,光线的变化就会引起误检测,还是 ...

  5. python list 删除元素_Python的list循环遍历中,删除数据的正确方法

    初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5]print(num_list)for i ...

  6. python正则匹配数字_python 正则匹配字母数字中的任意数字,字母

    原博文 2018-08-08 21:31 − ([1-9]\d*.\d*|0.\d*[1-9]\d*) (.*$) 字符串为:6.12 ounces... 相关推荐 2019-09-28 21:13 ...

  7. python requests超时时间_python - requests 库 使用过程中timeout值最大可设值?

    问 题 请问 requests 库 使用过程中timeout错误的默认时间是多长呢? 查看源码 理论上 timeout值可以任意设? 默认 timeout 值 是怎么来的呢? 如果我想设一个比较大的t ...

  8. python pip在哪里_Python 2.7.9(Linux)中的pip在哪里

    我意识到这个问题可能真的很愚蠢,但我不能为我的生活找出安装python 2.7.9时我能找到pip的地方.我知道pip捆绑在这个版本及以上版本中,但我仍然无法找到它.我没有常规的写权限,也没有包管理器 ...

  9. python访问网页变量_Python 如何访问外围作用域中的变量

    在表达式中引用变量时,Python 会按照如下的顺序遍历各个作用域,寻找该变量: 当前函数作用域 任何外围作用域(比如包含当前函数的其他函数) global 作用域,即代码所在的模块的作用域 如果上述 ...

  10. python生成shell脚本_Python设置在shell脚本中自动补全功能的方法

    本篇博客将会简短的介绍,如何在ubuntu中设置python自动补全功能. 需求:由于python中的内建函数较多,我们在百纳乘时,可能记不清函数的名字,同时自动补全功能,加快了我们开发的效率. 方法 ...

最新文章

  1. 一个好用的C++的json库
  2. 第一次亲密接触vim编辑器
  3. SAP 盘盈盘亏移动类型701702 Vs 711712
  4. matlab GM(2,1)模型
  5. DPDK pmd驱动初始化(十九)
  6. python好不好用_但python以前不太好用
  7. 生产系统遇到的问题:producers blocked
  8. SAP CRM One Order header数据库表几个和时间戳相关的字段
  9. FIR仿真module_04
  10. linux之tail 命令
  11. 软件开发:到底谁还在传言软件巨头濒临死亡?
  12. 一行代码视频下载,so easy!
  13. java计算机毕业设计红色主题旅游网站源码+mysql数据库+系统+lw文档+部署
  14. 设计模式--代理模式--深入理解动态代理
  15. 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc
  16. CATIA软件VBA二次开发:Excel文件中点坐标数据导入与生成点应用程序编写
  17. python错误:TypeError: Cannot interpret ‘3‘ as a data type
  18. asr语音识别入门材料
  19. PowerBI中的函数日期表
  20. 中国新零售行业运营效益与创新发展模式咨询报告2022版

热门文章

  1. 微型计算机主机箱内的所有部件均由大规模,2012年自考《计算机应用基础》模拟试题...
  2. redhat5.4 安装mysql_Linux redhat 5.4上安装MYDNS
  3. 本科计算机专业在车辆段,机电与轨道车辆工程系2021届毕业生参加成都铁路局车辆段及电务段认知实习...
  4. gta5显示nat较为严格_一年内上涨近3000元/㎡!碧桂园翡翠华府物业管理严格到令人惊叹...
  5. java实现简单二叉树
  6. unbuntu cmake安装mysql_ubuntu下编译安装mysql5.5
  7. 计算机mips是什么,在计算机术语中,什么叫MIPS
  8. php mysql group by_php – 如何在mysql查询中解决“不在GROUP BY中”错误
  9. Linux统一编程接口,restful接口设计规范总结
  10. Gensee SDK RoleType详解