栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

返回输出之前,Python子进程在后台运行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

返回输出之前,Python子进程在后台运行

首先:我建议不要

perf
在您的python进程中进行调用(如您在下面的任务的复杂性中所看到的),而是使用从命令行进行:

sudo perf stat -- python test.py

如果您 真的 想从python中调用perf,那么您将面临一些棘手的问题:

  1. 终止
    perf
    并使其输出收集的性能统计信息,您需要向其发送
    SIGINT
    信号(尝试使用
    sudo perf stat -p mypid
    ctrl-
    将不打印任何内容,而
    ctrl-c
    将打印)
  2. 您需要捕获,
    stderr
    因为perf将其输出发送到
    stderr
    (至少在我的版本中)
  3. 您需要使用
    fork()
    一个进程发送
    SIGINT
    ,而另一进程在进程终止时读取它的输出。如果没有fork,它将无法正常工作,因为在您执行
    SIGINT
    了该
    perf
    过程之后,您将无法再从stdin中读取该过程,因为该进程已经消失了,而当您从头
    stdin
    开始读取该文件时,直到perf被正确终止,您将无法获得任何输出。

这意味着您将最终获得此python程序:

import subprocessimport osimport signalimport timeperf = subprocess.Popen(['perf', 'stat',  '-p', str(os.getpid())], stderr=subprocess.PIPE)# <-- your pre goes hereif os.fork() == 0:    # child    time.sleep(1)  # wait until parent runs `stderr.read()`    perf.send_signal(signal.SIGINT)    exit(0)# parentprint("got perf stats>>{}<<".format(perf.stderr.read().depre("utf-8")))

time.sleep(1)
位是丑陋的,它做什么它,它会,但我想它会做的伎俩为99%的情况。它几乎对perf数据没有影响,唯一的影响是对“总运行时间”(
*xxseconds time elapsed



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号