Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Poirier <theeth@yahoo.com>2009-09-10 00:56:49 +0400
committerMartin Poirier <theeth@yahoo.com>2009-09-10 00:56:49 +0400
commit434af76286152c001d9df0d6da8048fb6da85696 (patch)
treea1fb44e14e4f8c759ea3aa2be563d7b0d2e9bc88
parent25f4fe5d13c76fa8604931f4f61044c26cc29795 (diff)
support for external images, blacklisting slaves on errors and proper job termination on cancel
-rw-r--r--release/io/netrender/client.py18
-rw-r--r--release/io/netrender/master.py54
-rw-r--r--release/io/netrender/slave.py3
3 files changed, 50 insertions, 25 deletions
diff --git a/release/io/netrender/client.py b/release/io/netrender/client.py
index da27a8ecc57..0c60bd1603c 100644
--- a/release/io/netrender/client.py
+++ b/release/io/netrender/client.py
@@ -26,6 +26,9 @@ def clientSendJob(conn, scene, anim = False, chunks = 5):
if job_name == "[default]":
job_name = name
+ ###########################
+ # LIBRARIES
+ ###########################
for lib in bpy.data.libraries:
lib_path = lib.filename
@@ -34,11 +37,13 @@ def clientSendJob(conn, scene, anim = False, chunks = 5):
job.addFile(lib_path)
+ ###########################
+ # POINT CACHES
+ ###########################
+
root, ext = os.path.splitext(name)
cache_path = path + os.sep + "blendcache_" + root + os.sep # need an API call for that
- print("cache:", cache_path)
-
if os.path.exists(cache_path):
caches = {}
pattern = re.compile("([a-zA-Z0-9]+)_([0-9]+)_[0-9]+\.bphys")
@@ -80,7 +85,14 @@ def clientSendJob(conn, scene, anim = False, chunks = 5):
previous_frame = previous_item[0]
job.addFile(cache_path + current_file, previous_frame + 1, next_frame - 1)
- print(job.files)
+ ###########################
+ # IMAGES
+ ###########################
+ for image in bpy.data.images:
+ if image.source == "FILE" and not image.packed_file:
+ job.addFile(image.filename)
+
+ # print(job.files)
job.name = job_name
diff --git a/release/io/netrender/master.py b/release/io/netrender/master.py
index d938c59a2ec..78e9243bc9d 100644
--- a/release/io/netrender/master.py
+++ b/release/io/netrender/master.py
@@ -477,33 +477,43 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
print("writing result file")
self.server.stats("", "Receiving render result")
- job_id = self.headers['job-id']
+ slave_id = self.headers['slave-id']
- job = self.server.getJobByID(job_id)
+ slave = self.server.updateSlave(slave_id)
- if job:
- job_frame = int(self.headers['job-frame'])
- job_result = int(self.headers['job-result'])
- job_time = float(self.headers['job-time'])
+ if slave: # only if slave id is valid
+ job_id = self.headers['job-id']
- if job_result == DONE:
- length = int(self.headers['content-length'])
- buf = self.rfile.read(length)
- f = open(job.save_path + "%04d" % job_frame + ".exr", 'wb')
- f.write(buf)
- f.close()
-
- del buf
-
job = self.server.getJobByID(job_id)
- frame = job[job_frame]
- frame.status = job_result
- frame.time = job_time
-
- self.server.updateSlave(self.headers['slave-id'])
- self.send_head()
- else: # job not found
+ if job:
+ job_frame = int(self.headers['job-frame'])
+ job_result = int(self.headers['job-result'])
+ job_time = float(self.headers['job-time'])
+
+ frame = job[job_frame]
+
+ if job_result == DONE:
+ length = int(self.headers['content-length'])
+ buf = self.rfile.read(length)
+ f = open(job.save_path + "%04d" % job_frame + ".exr", 'wb')
+ f.write(buf)
+ f.close()
+
+ del buf
+ elif job_result == ERROR:
+ # blacklist slave on this job on error
+ job.blacklist.append(slave.id)
+
+ frame.status = job_result
+ frame.time = job_time
+
+ self.server.updateSlave(self.headers['slave-id'])
+
+ self.send_head()
+ else: # job not found
+ self.send_head(http.client.NO_CONTENT)
+ else: # invalid slave id
self.send_head(http.client.NO_CONTENT)
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
elif self.path == "log":
diff --git a/release/io/netrender/slave.py b/release/io/netrender/slave.py
index 0435ba3f8cb..c12c846231d 100644
--- a/release/io/netrender/slave.py
+++ b/release/io/netrender/slave.py
@@ -119,6 +119,9 @@ def render_slave(engine, scene):
run_t = current_t
if cancelled:
+ # kill process if needed
+ if process.poll() == None:
+ process.terminate()
continue # to next frame
total_t = time.time() - start_t