Code cleanup in netrender

This commit is contained in:
2009-11-18 17:07:42 +00:00
parent 1f3ab7afd4
commit 5a6261afb3
4 changed files with 66 additions and 46 deletions

View File

@@ -200,14 +200,14 @@ class NetworkRenderEngine(bpy.types.RenderEngine):
def render_slave(self, scene): def render_slave(self, scene):
slave.render_slave(self, scene) slave.render_slave(self, scene.network_render)
def render_client(self, scene): def render_client(self, scene):
netsettings = scene.network_render netsettings = scene.network_render
self.update_stats("", "Network render client initiation") self.update_stats("", "Network render client initiation")
conn = clientConnection(scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
# Sending file # Sending file

View File

@@ -36,8 +36,9 @@ class RENDER_OT_netclientanim(bpy.types.Operator):
def execute(self, context): def execute(self, context):
scene = context.scene scene = context.scene
netsettings = scene.network_render
conn = clientConnection(scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
# Sending file # Sending file
@@ -62,8 +63,9 @@ class RENDER_OT_netclientsend(bpy.types.Operator):
def execute(self, context): def execute(self, context):
scene = context.scene scene = context.scene
netsettings = scene.network_render
conn = clientConnection(scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
# Sending file # Sending file
@@ -86,7 +88,7 @@ class RENDER_OT_netclientstatus(bpy.types.Operator):
def execute(self, context): def execute(self, context):
netsettings = context.scene.network_render netsettings = context.scene.network_render
conn = clientConnection(context.scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
conn.request("GET", "/status") conn.request("GET", "/status")
@@ -187,7 +189,7 @@ class RENDER_OT_netclientslaves(bpy.types.Operator):
def execute(self, context): def execute(self, context):
netsettings = context.scene.network_render netsettings = context.scene.network_render
conn = clientConnection(context.scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
conn.request("GET", "/slaves") conn.request("GET", "/slaves")
@@ -233,7 +235,7 @@ class RENDER_OT_netclientcancel(bpy.types.Operator):
def execute(self, context): def execute(self, context):
netsettings = context.scene.network_render netsettings = context.scene.network_render
conn = clientConnection(context.scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
job = bpy.netrender_jobs[netsettings.active_job_index] job = bpy.netrender_jobs[netsettings.active_job_index]
@@ -261,7 +263,7 @@ class RENDER_OT_netclientcancelall(bpy.types.Operator):
def execute(self, context): def execute(self, context):
netsettings = context.scene.network_render netsettings = context.scene.network_render
conn = clientConnection(context.scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
conn.request("POST", "/clear") conn.request("POST", "/clear")
@@ -291,7 +293,7 @@ class netclientdownload(bpy.types.Operator):
netsettings = context.scene.network_render netsettings = context.scene.network_render
rd = context.scene.render_data rd = context.scene.render_data
conn = clientConnection(context.scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
job = bpy.netrender_jobs[netsettings.active_job_index] job = bpy.netrender_jobs[netsettings.active_job_index]
@@ -332,26 +334,16 @@ class netclientscan(bpy.types.Operator):
return True return True
def execute(self, context): def execute(self, context):
netsettings = context.scene.network_render address, port = clientScan()
try: if address:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) scene = context.scene
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) netsettings = scene.network_render
s.settimeout(30) netsettings.server_address = address
netsettings.server_port = port
s.bind(('', 8000))
buf, address = s.recvfrom(64)
print("received:", buf)
netsettings.server_address = address[0]
netsettings.server_port = int(str(buf, encoding='utf8'))
except socket.timeout:
print("no server info")
return ('FINISHED',) return ('FINISHED',)
def invoke(self, context, event): def invoke(self, context, event):
return self.execute(context) return self.execute(context)
@@ -369,7 +361,7 @@ class netclientweb(bpy.types.Operator):
# open connection to make sure server exists # open connection to make sure server exists
conn = clientConnection(context.scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
conn.close() conn.close()

View File

@@ -23,6 +23,8 @@ import subprocess, time
from netrender.utils import * from netrender.utils import *
import netrender.model import netrender.model
BLENDER_PATH = sys.argv[0]
CANCEL_POLL_SPEED = 2 CANCEL_POLL_SPEED = 2
MAX_TIMEOUT = 10 MAX_TIMEOUT = 10
INCREMENT_TIMEOUT = 1 INCREMENT_TIMEOUT = 1
@@ -85,13 +87,12 @@ def testFile(conn, job_id, slave_id, JOB_PREFIX, file_path, main_path = None):
return job_full_path return job_full_path
def render_slave(engine, scene): def render_slave(engine, netsettings):
netsettings = scene.network_render
timeout = 1 timeout = 1
engine.update_stats("", "Network render node initiation") engine.update_stats("", "Network render node initiation")
conn = clientConnection(scene) conn = clientConnection(netsettings.server_address, netsettings.server_port)
if conn: if conn:
conn.request("POST", "/slave", repr(slave_Info().serialize())) conn.request("POST", "/slave", repr(slave_Info().serialize()))
@@ -150,7 +151,7 @@ def render_slave(engine, scene):
frame_args += ["-f", str(frame.number)] frame_args += ["-f", str(frame.number)]
val = SetErrorMode() val = SetErrorMode()
process = subprocess.Popen([sys.argv[0], "-b", job_full_path, "-o", JOB_PREFIX + "######", "-E", "BLENDER_RENDER", "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) process = subprocess.Popen([BLENDER_PATH, "-b", job_full_path, "-o", JOB_PREFIX + "######", "-E", "BLENDER_RENDER", "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
RestoreErrorMode(val) RestoreErrorMode(val)
elif job.type == netrender.model.JOB_PROCESS: elif job.type == netrender.model.JOB_PROCESS:
command = job.frames[0].command command = job.frames[0].command
@@ -240,3 +241,6 @@ def render_slave(engine, scene):
return return
conn.close() conn.close()
if __name__ == "__main__":
pass

View File

@@ -16,14 +16,18 @@
# #
# ##### END GPL LICENSE BLOCK ##### # ##### END GPL LICENSE BLOCK #####
import bpy
import sys, os import sys, os
import re import re
import http, http.client, http.server, urllib import http, http.client, http.server, urllib, socket
import subprocess, shutil, time, hashlib import subprocess, shutil, time, hashlib
import netrender.model import netrender.model
try:
import bpy
except:
bpy = None
VERSION = b"0.5" VERSION = b"0.5"
# Jobs status # Jobs status
@@ -39,27 +43,47 @@ DONE = 2
ERROR = 3 ERROR = 3
STATUS_TEXT = { STATUS_TEXT = {
QUEUED: "Queued", QUEUED: "Queued",
DISPATCHED: "Dispatched", DISPATCHED: "Dispatched",
DONE: "Done", DONE: "Done",
ERROR: "Error" ERROR: "Error"
} }
def rnaType(rna_type): def rnaType(rna_type):
bpy.types.register(rna_type) if bpy: bpy.types.register(rna_type)
return rna_type return rna_type
def rnaOperator(rna_op): def rnaOperator(rna_op):
bpy.ops.add(rna_op) if bpy: bpy.ops.add(rna_op)
return rna_op return rna_op
def clientConnection(scene): def clientScan():
netsettings = scene.network_render try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.settimeout(30)
s.bind(('', 8000))
if netsettings.server_address == "[default]": buf, address = s.recvfrom(64)
bpy.ops.render.netclientscan()
conn = http.client.HTTPConnection(netsettings.server_address, netsettings.server_port) print("received:", buf)
address = address[0]
port = int(str(buf, encoding='utf8'))
return (address, port)
except socket.timeout:
print("no server info")
return ("", 8000) # return default values
def clientConnection(address, port):
if address == "[default]":
if bpy:
bpy.ops.render.netclientscan()
else:
address, port = clientScan()
conn = http.client.HTTPConnection(address, port)
if clientVerifyVersion(conn): if clientVerifyVersion(conn):
return conn return conn