...
The following is an example of a callback that runs for every frame when the job completes. Â Admittedly, it may be more efficient to run it once and have the external script iterate over every frame, but this is for demonstration purposes.
Note | ||
---|---|---|
| ||
Please note the use of Do not use os.system() to run the external script, as this call will block until the external script exits. When a large number of callbacks tie up supervisor processes at the same time, your supervisor performance will suffer. |
Warning | ||
---|---|---|
| ||
Do not call |
Code Block | ||||
---|---|---|---|---|
| ||||
#!/bin/env python import sys,os sys.path.append('%s/api/python' % os.environ['QBDIR']) import qb scriptPathOnSupervisor = '/Users/jburk/test/testCbScript.py' ######################################## # build the job ######################################## job = { 'prototype': 'cmdrange', 'name': 'supervisor-side script execution callback test', 'package': {'cmdline': 'hostname'}, 'agenda': [], 'callbacks': [ ] } ######################################## # iterate over the frame range to build the job's agenda and callbacks ######################################## for i in range(5): # an agenda item can simply be a frame number work = {'name': i} job['agenda'].append(work) # build a callback for each item in the agenda (each frame) cb = { 'language': 'python', 'triggers': 'done-job-self', 'code': ''' import os,subprocess jobId = qb.jobid() workName = %s script = '%s' if os.path.exists(script): pid = subprocess.Popen(["python", script, str(jobId), str(workName)]).pid ''' % (i, scriptPathOnSupervisor) } # append the frame's callback to the job's callback list job['callbacks'].append(cb) ######################################## # submit the job ######################################## submitted = qb.submit(job) for job in submitted: print 'submitted %(id)s: %(name)s' % job |
...