...
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
|
...