首先:我建议不要perf
在您的python进程中进行调用(如您在下面的任务的复杂性中所看到的),而是使用从命令行进行:
sudo perf stat -- python test.py
如果您 想从python中调用perf,那么您将面临一些棘手的问题:
这意味着您将最终获得此python程序:
import subprocess
import os
import signal
import time
perf = subprocess.Popen(['perf', 'stat', '-p', str(os.getpid())], stderr=subprocess.PIPE)
# <-- your code goes here
if os.fork() == 0:
# child
time.sleep(1) # wait until parent runs `stderr.read()`
perf.send_signal(signal.SIGINT)
exit(0)
# parent
print("got perf stats>>{}<<".format(perf.stderr.read().decode("utf-8")))
该time.sleep(1)
位是丑陋的,它做什么它,它会,但我想它会做的伎俩为99%的情况。它几乎对perf数据没有影响,唯一的影响是对“总运行时间”(*xx seconds time elapsed
)