====== Deadline Basic ====== * Deadline is a render manage application, it needs to install on all render client and all render slave and also the main deadline database server machine. * Deadline needs all machine can access a common network shared drive, one for all project, one for its repo which holds all the config and setting and tools under Deadline. * The "Deadline Repo" location is important, * under its repo/, it has * repo/api/python: for use python to control the whole deadline system and its network * repo/settings: connection.ini contains all the server info, like IP address, database info * There are several applications under it to form the Deadline system * Deadline Monitor: the overview list app to view and submit job in one location * Tool (check Super user mode) > Configure Repository Option > web service settings : shows it listening port for web RESTful api info ====== Python Scripting for Deadline ====== * command in windows cd "c:\Program Files\Thinkbox\Deadline10\bin" deadlinecommand.exe --version REM get job detail and put into text "D:\App\Deadline\bin\deadlinecommand.exe" -getjob 5cb6d7a04a99da2b84ad7cbe > d:\zTmp\result.txt REM get slave names of a pool, return a list of slave machine names "D:\App\Deadline\bin\deadlinecommand.exe" -getslavenamesinpool movie_nuke Assigned REM job list "D:\App\Deadline\bin\deadlinecommand.exe" -getjobsfilter username=tester * Python can be used for commanding the Deadline system, also can be used to Post-render/Pre-render script for triggering under render job events ====== Get Submission Info ====== * mel process (SubmitMayaToDeadline.mel) - submit job label (9163 line) > SetupSubmission() - submit job label (next to Pipeline tool) @ 10743 > DeadlineSubmitterOnOk() > SetupSubmission() * for commandline # get deadline cmd exe path dl_cmd = os.path.normpath( os.path.join(os.environ['DEADLINE_PATH'], 'deadlinecommand.exe') ) # use deadline cmd to get deadline system info cmd = r'"{0}" -JSON -GetSubmissionInfo Pools Groups MaxPriority TaskLimit UserHomeDir RepoDir:submission/Maya/Main RepoDir:submission/Integration/Main'.format(dl_cmd) # note: the original mel code, put " 2> nul" at the end of the cmd, which means no err output, and only 1st output/the result to the string. # so they don't need 2 variable like bellow to catch the return values. info=subprocess.Popen(cmd,stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) out, err = info.communicate() exitcode = info.returncode # read data import json dl_data = json.loads(out) deadlineSubmissionInfo=dl_data['result'] # pool list pool_list = deadlineSubmissionInfo['Pools'] * for existing maya deadline scene, the attribute is stored at defaultRenderGlobals # for existing deadline scene cmds.getAttr('defaultRenderGlobals.DeadlineMayaRepoPath') # all the attribute saving is at SavePersistentDeadlineOptions() in mel * other maya info # current renderer renderer = cmds.getAttr('defaultRenderGlobals.currentRenderer') # arnold # current render layer currentRenderLayer = cmds.editRenderLayerGlobals(q=1, currentRenderLayer=1) # render animation? render_animation = cmds.getAttr("defaultRenderGlobals.animation") # true # Get frame list 1-3 style frameList = str( int(cmds.currentTime(q=1)) ) if render_animation: fromFrame = int( cmds.getAttr('defaultRenderGlobals.startFrame') ) toFrame = int( cmds.getAttr('defaultRenderGlobals.endFrame') ) byFrame = int( cmds.getAttr('defaultRenderGlobals.byFrameStep') ) frameList = fromFrame if fromFrame != toFrame: frameList = "{0}-{1}".format(frameList, toFrame) if byFrame > 1: frameList = "{0}x{1}".format(frameList, byFrame)