[Durian-svn] [3276] script for gathering render times

campbell institute at blender.org
Wed May 12 20:08:14 CEST 2010


Revision: 3276
          https://blenderinstitute.dyndns.org/durian-svn/?do=log&project=durian&path=/&rev=3276
Author:   campbell
Date:     2010-05-12 20:08:13 +0200 (Wed, 12 May 2010)
Log Message:
-----------
script for gathering render times

Added Paths:
-----------
    frm/exr_header_collate.py

Added: frm/exr_header_collate.py
===================================================================
--- frm/exr_header_collate.py	                        (rev 0)
+++ frm/exr_header_collate.py	2010-05-12 18:08:13 UTC (rev 3276)
@@ -0,0 +1,124 @@
+import os
+import subprocess
+import time
+
+# copied from bpy.utils
+def smpte_from_seconds(time):
+    import math
+
+    hours = minutes = seconds = frames = 0
+
+    if time < 0:
+        time = -time
+        neg = "-"
+    else:
+        neg = ""
+
+    if time >= 3600.0: # hours
+        hours = int(time / 3600.0)
+        time = time % 3600.0
+    if time >= 60.0: # mins
+        minutes = int(time / 60.0)
+        time = time % 60.0
+
+    seconds = time
+    string = "%s%02dh, %02dmin, %0.1fsec" % (neg, hours, minutes, seconds)
+    return string.replace("00h, ", "     ")
+
+def format_time(file, sec):
+    return "%s | %s | %.2f" % (file, smpte_from_seconds(sec), sec)
+
+def file_date(path):
+    #currtime = (year, month, day, hour, min, sec)
+    # year, month, day, hour, minute, second, weekday, yearday, daylight = now
+    return time.localtime(os.stat(path)[8])[0:6]
+
+
+def main():
+    all_rendertimes = []
+    
+    DIR = "/shared/render/"
+    for dirname in os.listdir(DIR):
+        dirname_full = os.path.join(DIR, dirname)
+        time_file = os.path.join(dirname_full, "render_times.txt")
+
+        if os.path.isdir(dirname_full):
+            exrs = []
+            
+            if os.path.exists(time_file):
+                time_file_chtime = file_date(time_file) 
+            else:
+                time_file_chtime = None
+                
+            generate_timefile = False
+            
+            for exr in sorted(os.listdir(dirname_full)):
+                if exr.endswith(".exr"):
+                    # print(exr)
+                    exr_full = os.path.join(dirname_full, exr)
+                    exrs.append((exr, exr_full))
+                    
+                    if time_file_chtime is None:
+                        generate_timefile = True
+                    else:
+                        if time_file_chtime < file_date(exr_full):
+                            generate_timefile = True
+                        
+            if generate_timefile:
+                print("Timefile writing:", time_file)
+            else:
+                print("Timefile up-to-date:", time_file)
+
+            if generate_timefile or True:
+                file_rendertimes = []
+                for exr, exr_full in exrs:
+                        # yay. we have exr
+
+                        out, err = subprocess.Popen(["exrheader", exr_full], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
+                        # print(out)
+                        lines = [l for l in out.split("\n") if "RenderTime" in l]
+                        if lines:
+                            # convert to time
+                            time = 0.0
+                            time_str = lines[0].split()[-1].replace('"', '')
+                            time_split = time_str.split(":")
+                            sec = float(time_split.pop())
+                            if time_split:
+                                sec += float(time_split.pop()) * 60.0
+
+                            if time_split:
+                                sec += float(time_split.pop()) * 3600.0
+
+                            file_rendertimes.append((exr, sec))
+                
+                if file_rendertimes:
+                    avg = 0.0
+                    for exr, sec in file_rendertimes:
+                        avg += sec 
+                    
+                    avg /= len(file_rendertimes)
+                    
+                    file_rendertimes.insert(0, (dirname_full, avg))
+                    
+                    # write a txt to the farm
+                    file_txt = open(time_file, 'w')
+                    for item in file_rendertimes:
+                        file_txt.write(format_time(*item) + "\n")
+                    
+                    print(time_file)
+                    
+                    all_rendertimes.append(file_rendertimes)
+    
+    
+    
+    summery = os.path.join(DIR, "render_times.txt")
+    print(summery)
+    summery_file = open(summery, 'w')
+    
+    for file_rendertimes in all_rendertimes:
+        print(1)
+        summery_file.write(format_time(*file_rendertimes[0]) + (" | items %d\n" % (len(file_rendertimes)-1)))
+        
+
+if __name__ == "__main__":
+    main()



More information about the Durian-svn mailing list