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)