36
36
import resource
37
37
import subprocess
38
38
import sys
39
+ import time
39
40
40
41
41
42
class MemAction (argparse .Action ):
@@ -79,6 +80,9 @@ def __call__(self, parser, namespace, v, option_string=None):
79
80
metavar = "T" ,
80
81
help = "time (in secs, or ..'ms', 'us')" ,
81
82
action = TimeAction )
83
+ parser .add_argument ("--wall-time" ,
84
+ help = "wall time (in secs, or ..'ms', 'us')" ,
85
+ action = 'store_true' )
82
86
parser .add_argument ("--enforce" ,
83
87
action = 'store_true' ,
84
88
default = False ,
@@ -125,7 +129,13 @@ def __call__(self, parser, namespace, v, option_string=None):
125
129
sys .stderr .write ("rusage: setrlimit(RLIMIT_RSS, %d)\n "
126
130
% mem )
127
131
resource .setrlimit (resource .RLIMIT_RSS , (mem , mem ))
132
+
133
+ start = time .time ()
128
134
ret = subprocess .call (args .remainder )
135
+ end = time .time ()
136
+
137
+ wall_time = end - start
138
+
129
139
used = resource .getrusage (resource .RUSAGE_CHILDREN )
130
140
131
141
if args .verbose :
@@ -144,18 +154,27 @@ def __call__(self, parser, namespace, v, option_string=None):
144
154
if args .verbose or over_time :
145
155
sys .stderr .write ("rusage: subprocess time: %.6f secs\n "
146
156
% used .ru_utime )
157
+ if args .wall_time :
158
+ sys .stderr .write ("rusage: subprocess wall time: %.6f secs\n "
159
+ % wall_time )
147
160
if over_time :
148
161
sys .stderr .write ("rusage: exceeded limit: %.6f secs\n "
149
162
% args .time )
150
163
151
164
if args .csv :
152
165
fieldnames = ["time" , "mem" , "run" ]
166
+ row = {
167
+ 'time' : used .ru_utime ,
168
+ 'mem' : used .ru_maxrss ,
169
+ 'run' : args .csv_name
170
+ }
171
+ if args .wall_time :
172
+ row ['wall' ] = wall_time
173
+ fieldnames .insert (1 , 'wall' )
153
174
out = csv .DictWriter (args .csv_output , fieldnames , dialect = 'excel-tab' )
154
175
if args .csv_header :
155
176
out .writeheader ()
156
- out .writerow (dict (time = used .ru_utime ,
157
- mem = used .ru_maxrss ,
158
- run = args .csv_name ))
177
+ out .writerow (row )
159
178
160
179
if over_mem or over_time :
161
180
sys .exit (- 1 )
0 commit comments