Python:如果子流程检查输出等待时间太长,无法接收输出

2024-05-19 10:09:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我实现了一个缓存不经意算法,并用PAPI library说明了L1/L2/L3未命中率非常低。但是,如果我减少可用的RAM内存并强制算法开始使用磁盘中的交换空间,我也希望看到算法的行为。由于该算法是不受缓存影响的,因此对于同一问题,我希望与其他不受缓存影响的算法相比,它可以更好地扩展到磁盘。你知道吗

然而,问题是很难预测算法在磁盘上运行后的性能会有多差;输入大小的微小增加可能会极大地改变算法完成运行所需的时间。因此,如果你有很多算法需要测试,如果一个算法需要很长时间才能完成,那么这个实验将毫无用处(我当然可以坐下来监视这个实验,然后用ctrl+c杀死if,但我真的需要睡觉)。你知道吗

假设算法是ABC。我使用不同的python脚本,每个算法一个。对于不同的输入大小n,我使用subprocess.check_output来调用实现的可执行文件。这个可执行文件返回一些统计信息,然后以适当的格式进行处理和存储,然后可以与R一起使用,例如制作一些漂亮的绘图。你知道吗

这是算法A的示例代码:

import subprocess
import sys
f1=open('data.stats', 'w+', 1)
min = 200000
max = 2000000
step = 200000
iterations = 10
ns = range(minLeafs, maxLeafs+1, step)
incr = 0
f1.write('n\tp\talg\ttime\n')
for n in ns:
    i = 0
    for p in ps:
        for it in range(0, iterations):
            resA = subprocess.check_output(['/usr/bin/time', '-v','./A',n],
            stderr=subprocess.STDOUT)
            #do something with resA
            f1.write(resA + '\n')
            incr = incr + 1
            print(incr/(((len(ns)))*iterations)*100.0, '%', end="\r")
        i = i + 1

我的问题是,如果subprocess.check_output需要很长时间才能得到答案,我是否可以终止一个脚本?对我来说,最好是定义一个截止时间,比如10分钟,所以如果subprocess.check_output没有收到任何东西,那么就终止整个脚本。你知道吗


Tags: in脚本算法可执行文件foroutputcheck时间

热门问题