我实现了一个缓存不经意算法,并用PAPI library说明了L1/L2/L3未命中率非常低。但是,如果我减少可用的RAM内存并强制算法开始使用磁盘中的交换空间,我也希望看到算法的行为。由于该算法是不受缓存影响的,因此对于同一问题,我希望与其他不受缓存影响的算法相比,它可以更好地扩展到磁盘。你知道吗
然而,问题是很难预测算法在磁盘上运行后的性能会有多差;输入大小的微小增加可能会极大地改变算法完成运行所需的时间。因此,如果你有很多算法需要测试,如果一个算法需要很长时间才能完成,那么这个实验将毫无用处(我当然可以坐下来监视这个实验,然后用ctrl+c
杀死if,但我真的需要睡觉)。你知道吗
假设算法是A
、B
和C
。我使用不同的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
没有收到任何东西,那么就终止整个脚本。你知道吗
如果您使用的是python3(并且print调用的格式表明您可能使用),那么
check_output
实际上已经有一个timeout参数,它可能对您有用:https://docs.python.org/3.6/library/subprocess.html#subprocess.check_output相关问题 更多 >
编程相关推荐