forked from bartvdbraak/blender
support for external images, blacklisting slaves on errors and proper job termination on cancel
This commit is contained in:
parent
25f4fe5d13
commit
434af76286
@ -26,6 +26,9 @@ def clientSendJob(conn, scene, anim = False, chunks = 5):
|
|||||||
if job_name == "[default]":
|
if job_name == "[default]":
|
||||||
job_name = name
|
job_name = name
|
||||||
|
|
||||||
|
###########################
|
||||||
|
# LIBRARIES
|
||||||
|
###########################
|
||||||
for lib in bpy.data.libraries:
|
for lib in bpy.data.libraries:
|
||||||
lib_path = lib.filename
|
lib_path = lib.filename
|
||||||
|
|
||||||
@ -34,11 +37,13 @@ def clientSendJob(conn, scene, anim = False, chunks = 5):
|
|||||||
|
|
||||||
job.addFile(lib_path)
|
job.addFile(lib_path)
|
||||||
|
|
||||||
|
###########################
|
||||||
|
# POINT CACHES
|
||||||
|
###########################
|
||||||
|
|
||||||
root, ext = os.path.splitext(name)
|
root, ext = os.path.splitext(name)
|
||||||
cache_path = path + os.sep + "blendcache_" + root + os.sep # need an API call for that
|
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):
|
if os.path.exists(cache_path):
|
||||||
caches = {}
|
caches = {}
|
||||||
pattern = re.compile("([a-zA-Z0-9]+)_([0-9]+)_[0-9]+\.bphys")
|
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]
|
previous_frame = previous_item[0]
|
||||||
job.addFile(cache_path + current_file, previous_frame + 1, next_frame - 1)
|
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
|
job.name = job_name
|
||||||
|
|
||||||
|
@ -477,33 +477,43 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
|||||||
print("writing result file")
|
print("writing result file")
|
||||||
self.server.stats("", "Receiving render result")
|
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:
|
if slave: # only if slave id is valid
|
||||||
job_frame = int(self.headers['job-frame'])
|
job_id = self.headers['job-id']
|
||||||
job_result = int(self.headers['job-result'])
|
|
||||||
job_time = float(self.headers['job-time'])
|
|
||||||
|
|
||||||
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)
|
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()
|
if job:
|
||||||
else: # job not found
|
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)
|
self.send_head(http.client.NO_CONTENT)
|
||||||
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
elif self.path == "log":
|
elif self.path == "log":
|
||||||
|
@ -119,6 +119,9 @@ def render_slave(engine, scene):
|
|||||||
run_t = current_t
|
run_t = current_t
|
||||||
|
|
||||||
if cancelled:
|
if cancelled:
|
||||||
|
# kill process if needed
|
||||||
|
if process.poll() == None:
|
||||||
|
process.terminate()
|
||||||
continue # to next frame
|
continue # to next frame
|
||||||
|
|
||||||
total_t = time.time() - start_t
|
total_t = time.time() - start_t
|
||||||
|
Loading…
Reference in New Issue
Block a user