我正在尝试在CUDA上使用一些具有如此多不同输入的分析工具来查看不同输入之间的差异。为此,我编写了一个python脚本来编译CUDA上的代码,使用不同的输入运行探查器并将结果写入CSV文件。 其中一些运行需要花费很多时间(大约3天!),如果超过阈值(例如30分钟),我想杀死特定的运行但我不知道该怎么做。这是我写的python脚本的一部分:
import subprocess ,sys, string, os
{START TIME}
p = subprocess.Popen([CUDA PROFILER COMMAND], stdout=subprocess.PIPE)
s, err = p.communicate()
{END TIME}
如果需要超过30分钟,我想测量START TIME和END TIME并停止此次运行。该脚本将逐行运行,如果CUDA PROFILER命令超过30分钟,它将永远不会到达{END TIME}行,我无法测量CUDA PROFILER命令的已用时间。任何建议都会非常感激。
答案 0 :(得分:1)
subprocess with timeout问题中有许多答案,您在评论中已将其链接起来。我选择了一对既简单又便携的情侣。 In Python 3.3+:
from subprocess import check_output
s = check_output(['cuda', 'profiler', 'command'], timeout=30*60)
from subprocess import Popen, PIPE
from threading import Timer
p = Popen(['cuda', 'profiler', 'command'], stdout=PIPE)
t = Timer(30*60, p.kill) # kill process in 30 minutes
t.start()
s = p.communicate()[0]
t.cancel() # cancel the hit