[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3666] trunk/py/scripts/tools/bi_farm: Renderfarm: show ETA for job

Sergey Sharybin sergey.vfx at gmail.com
Sat Aug 4 11:30:39 CEST 2012


Revision: 3666
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3666
Author:   nazgul
Date:     2012-08-04 09:30:38 +0000 (Sat, 04 Aug 2012)
Log Message:
-----------
Renderfarm: show ETA for job

This time is average time which is needed to finish
rendering current job (without taking other jobs render
time into account), which is:

average time * remained frames / number of slaves

Modified Paths:
--------------
    trunk/py/scripts/tools/bi_farm/master_ui.py
    trunk/py/scripts/tools/bi_farm/new_master.py

Modified: trunk/py/scripts/tools/bi_farm/master_ui.py
===================================================================
--- trunk/py/scripts/tools/bi_farm/master_ui.py	2012-08-03 23:42:41 UTC (rev 3665)
+++ trunk/py/scripts/tools/bi_farm/master_ui.py	2012-08-04 09:30:38 UTC (rev 3666)
@@ -97,6 +97,8 @@
         self.step = step
         self.order = 'SEQUENTIAL'
         self.processor = processor
+        self.image_done = 0
+        self.image_tot = 0
 
     @staticmethod
     def find(id):
@@ -223,15 +225,41 @@
     Job.dump()
 
 
+def get_slave_count_for_job(job):
+    count = 0
+
+    if job.processor == 'CUDA':
+        for slave in SLAVES:
+            if slave.enabled and slave.is_cuda:
+                count += 1
+    else:
+        for slave in SLAVES:
+            if slave.enabled:
+                count += 1
+
+    return count
+
 def job_set_stats(job):
     import exr_header_collate
     render_times = exr_header_collate.render_times(job.id)
     if render_times:
         time_avg, time_min, time_max = render_times
-        time_avg = str(datetime.timedelta(0, round(time_avg)))
-        time_max = str(datetime.timedelta(0, round(time_max)))
-        job.stats = time_avg + " avg, " + time_max + " max"
+        time_avg_str = str(datetime.timedelta(0, round(time_avg)))
+        time_max_str = str(datetime.timedelta(0, round(time_max)))
 
+        stats = time_avg_str + " avg, " + time_max_str + " max"
+
+        # ETA
+        remain = job.image_tot - job.image_done
+        slave_count = get_slave_count_for_job(job)
+
+        if remain != 0 and slave_count != 0:
+            time_eta = remain * time_avg / slave_count
+            time_eta_str = str(datetime.timedelta(0, round(time_eta)))
+            stats += ', ' + time_eta_str + ' ETA'
+
+        job.stats = stats
+
 ############################ Slaves ########################
 
 

Modified: trunk/py/scripts/tools/bi_farm/new_master.py
===================================================================
--- trunk/py/scripts/tools/bi_farm/new_master.py	2012-08-03 23:42:41 UTC (rev 3665)
+++ trunk/py/scripts/tools/bi_farm/new_master.py	2012-08-04 09:30:38 UTC (rev 3666)
@@ -207,6 +207,8 @@
         else:
             percentage = float(image_done) / float(image_tot)
         job.progress = "%.0f%% (%d/%d)" % (100 * percentage, image_done, image_tot)
+        job.image_done = image_done
+        job.image_tot = image_tot
 
     # update total progress
     if total_tot == 0:



More information about the Bf-extensions-cvs mailing list