使用子进程时如何限制程序的执行时间?

2024-02-20

我想使用子进程来运行程序,并且需要限制执行时间。例如,如果它运行超过2秒我想杀死它。

对于普通程序,kill() 效果很好。但如果我尝试跑步/usr/bin/time something,kill()并不能真正杀死程序。

我下面的代码似乎不能很好地工作。该程序仍在运行。

import subprocess
import time

exec_proc = subprocess.Popen("/usr/bin/time -f \"%e\\n%M\" ./son > /dev/null", stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell = True)

max_time = 1
cur_time = 0.0
return_code = 0
while cur_time <= max_time:
    if exec_proc.poll() != None:
        return_code = exec_proc.poll()
        break
    time.sleep(0.1)
    cur_time += 0.1

if cur_time > max_time:
    exec_proc.kill()

如果您使用的是 Python 2.6 或更高版本,则可以使用多重处理 http://docs.python.org/library/multiprocessing.html module.

from multiprocessing import Process

def f():
    # Stuff to run your process here

p = Process(target=f)
p.start()
p.join(timeout)
if p.is_alive():
    p.terminate()

实际上,多处理是执行此任务的错误模块,因为它只是控制线程运行时间的一种方法。您无法控制线程可能运行的任何子线程。正如奇点所暗示的那样,使用信号.警报 http://docs.python.org/library/signal.html#signal.alarm是正常的做法。

import signal
import subprocess

def handle_alarm(signum, frame):
    # If the alarm is triggered, we're still in the exec_proc.communicate()
    # call, so use exec_proc.kill() to end the process.
    frame.f_locals['self'].kill()

max_time = ...
stdout = stderr = None
signal.signal(signal.SIGALRM, handle_alarm)
exec_proc = subprocess.Popen(['time', 'ping', '-c', '5', 'google.com'],
                             stdin=None, stdout=subprocess.PIPE,
                             stderr=subprocess.STDOUT)
signal.alarm(max_time)
try:
    (stdout, stderr) = exec_proc.communicate()
except IOError:
    # process was killed due to exceeding the alarm
finally:
    signal.alarm(0)
# do stuff with stdout/stderr if they're not None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用子进程时如何限制程序的执行时间? 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • Jinja2 检查字典列表中是否存在值

    我正在尝试检查字典列表中是否存在某个值 我使用烧瓶1 0 2 请参阅下面的示例 person list dict name John Doe email email protected cdn cgi l email protection
  • 形成正则表达式来解析数字表达式

    我正在尝试解析字符串形式的数字比较 我想标记一个字符串 例如45 30 2 lt 50这样得到的组是45 30 2 lt and 50 我知道我可以将我的组定义为 w 对于数字项 对于括号内的术语 lt gt 1 2 对于运营商条款 但我不
  • 将 URL 参数添加到 Nutch/Solr 索引和搜索结果

    我找不到任何关于如何设置 nutch 来不过滤 删除我的 URL 参数的提示 我想抓取一些页面并为其建立索引 其中大量内容隐藏在相同的基本 URL 后面 例如 news jsp id 1 news jsp id 2 news jsp id
  • 所有音频频率

    我怎样才能获得 可能吗 所有音频现在都在系统中播放以编写一些声音可视化工具 有没有c 或c 库 提前致谢 基本步骤是 将窗函数应用于样本块 例如 1024 个样本 汉宁窗 对加窗样本执行实数到复数 FFT 取每个 FFT 输出 bin 的幅
  • Chrome 53 在第二页及以后的页面上打印两次表格标题的解决方法?

    我网站的用户需要能够打印包含第一页打印内容和第二页表格的网页 精简版本是 jsFiddle athttps jsfiddle net jaydeedub n3qhvtvx 25 https jsfiddle net jaydeedub n3
  • 根据另一列的排名计算一列的总和

    我有一个数据集 Security market value return Quintile 1 0 07 100 3 2 0 10 88 2 3 0 08 78 1 4 0 12 59 1 5 0 20 106 4 6 0 04 94 3
  • 我可以在运行时指定maven project.artifactId吗?

    我有一个 Maven POM 我想将其用作模板 根据我传递给它的参数生成具有不同名称的工件 但我不知道如何在运行时指定artifactId 如果我参数化
  • 用于 python 3.X 的 OpenCV

    有谁知道我是否可以在 python 3 X 中使用 OpenCV 库 或者我应该坚持使用scikit image用于物体识别之类的任务 我想尝试一下 openCV 但去年决定从 2 7 开始切换 我在这里搜索了数据包 http www lf
  • Java 中的 Windows 7 任务栏进度条

    我想知道是否可以像Windows资源管理器那样在进行文件操作时在任务栏上显示进度条 我看到很多例子 但都是C 的 SWT 不会削减它 我发现这个功能包含在Java 9 它是一部分AWT而且使用起来非常简单 这是一个简短的例子 import
  • 使用 Pandoc 和 Markdown 时出现紧密列表错误

    我在 Mac OS 10 12 上使用 pandoc v 1 18 将此 Markdown 文件转换为 pdf 使用简单的命令行 A list that does not work one two three 我收到此错误 Undefine
  • 使用 R 扩展时 NetLogo BehaviourSpace 崩溃

    我正在我的机器上运行动物饲养场的模型 我已将 R 扩展添加到 NetLogo 代码中 以计算每个家庭范围的最小凸多边形 当我在多个内核上的BehaviorSpace 中运行模型时 NetLogo 将在几个时间步骤后消失 即停止运行 我在 5
  • Visual Studio Code 中 Spring Boot 的热插拔

    我刚刚使用 Angular 4 启动了一个 Spring Boot 项目 对于 Angular 我可以运行npm start以便 NPM 编译每个更改 但我不知道如何为 Spring Boot 做到这一点 我可以找到一些 Eclipse I
  • Woocommerce 添加到购物车按钮重定向到结帐

    我使用插件 woocommerce 创建了一个电子商务 我只出售订阅 因此 cart 页面毫无用处 我正在尝试摆脱它 以便当我的客户单击 添加到购物车 按钮时 他最终会进入结帐页面 在 WooCommerce 3 6 或更高版本中 您可以使
  • 杰青 |更新由`select`选择的数组元素

    在 JSON 数组中 我想根据节点的值选择一个数组元素 然后更新同一数组元素中的不同节点 例如 在下面的 JSON 中 apiVersion vlabs properties orchestratorProfile orchestrator
  • 如何在屏幕旋转后禁用/避免片段自定义动画

    我刚刚发现 每次在片段上 setRetainInstance true 时 它都会按预期工作 保留片段数据 但这会导致片段的自定义动画在屏幕旋转后再次执行 有没有办法避免 禁用屏幕旋转时的这些动画 该片段是使用以下动画创建的 setCust
  • 如何放置我的网页以便我可以在谷歌搜索中找到我的页面? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何上传我的网页以便我可以在 Google 搜索中找到我的网页 搜索引擎优化可能是一个耗时的过程 但其中有几个因素 您的网站应该具有良好的关键字丰富的
  • 在Python中将命名列表向量从R翻译成rpy2?

    python 中的 Rpy2 中的以下 R 代码相当于什么 Var1 c navy darkgreen names Var1 c Class1 Class2 ann colors list Var1 Var1 目前尚不清楚是什么ann co
  • php ssh2_exec 不执行“su”命令

    我在 php 的 ssh2 中获得了很多乐趣 我正在通过 ssh ing 进入 localhost 运行 ubuntu 进行测试 我已经成功地使用我的用户名 而不是 root 进行连接和身份验证 并且一些命令 例如 ls 返回一些信息 这是
  • 单击 iAd 时暂停 SpriteKit 场景

    我正在研究一个SpriteKit项目 我正在努力在点击 iAd 时暂停游戏 并在点击 iAd 时取消暂停iAd被解雇 主要问题是从 ViewController 暂停场景 我知道如果我想从 ViewController 暂停场景Scene
  • 使用子进程时如何限制程序的执行时间?

    我想使用子进程来运行程序 并且需要限制执行时间 例如 如果它运行超过2秒我想杀死它 对于普通程序 kill 效果很好 但如果我尝试跑步 usr bin time something kill 并不能真正杀死程序 我下面的代码似乎不能很好地工