Next, we will submit a job with frames, or, in Qube!-speak, "agenda items".
Follow the code comments below:
| Code Block | ||
|---|---|---|
| ||
# As in the last example, we will need the os, sys, and qb modules:
import os, sys
try:
import qb
except ImportError:
if os.environ.get("QBDIR"):
qbdir_api = os.path.join(os.environ.get("QBDIR"),"api","python")
for api_path in (qbdir_api,
"/Applications/pfx/qube/api/python/",
"/usr/local/pfx/qube/api/python/",
"C:\\Program Files\\pfx\\qube\\api\\python",
"C:\\Program Files (x86)\\pfx\\qube\\api\\python"):
if api_path not in sys.path and os.path.exists(api_path):
sys.path.insert(0,api_path)
try:
import qb
except:
continue
break
# this should throw an exception if we've exhuasted all other possibilities
import qb
def main():
# The parameters here are the same as before, with exceptions noted
job = {}
job['name'] = 'python test job - echo the frame number'
# This time, we will request 4 instances (previously known as subjobs).
# By requesting 4 instances, assuming there are 4 open slots on the farm,
# up to 4 agenda items will be processed simultaneously.
job['cpus'] = 4
# In the last example, we used the prototype 'cmdline' which implied a single
# command being run on the farm. This time, we will use the 'cmdrange' prototype
# which tells Qube that we are running a command per agenda item.
job['prototype'] = 'cmdrange'
package = {}
# Just like the last example, we create a package parameter called 'cmdline'.
# This is the command that will be run for every agenda item. QB_FRAME_NUMBER,
# however, is unique to cmdrange. The text QB_FRAME_NUMBER will be replaced with
# the actual frame number at run time.
package['cmdline'] = 'echo QB_FRAME_NUMBER'
job['package'] = package
# Now we must create our agenda list. This is an absolutely essential part of
# submitting jobs with agenda items (i.e. frames).
# First we define a range. The range is in typical number range format where:
# 1-5 means frames 1,2,3,4,5
# 1,3,5 means frames 1,3, and 5
# 1-5,7 means frames 1,2,3,4,5,7
# 1-10x3 means frames 1,4,7,10
agendaRange = '0-60x10' # will evaluate to 0,10,20,30,40,50,60
# Using the given range, we will create an agenda list using qb.genframes
agenda = qb.genframes(agendaRange)
# Now that we have a properly formatted agenda, assign it to the job
job['agenda'] = agenda
# As before, we create a list of 1 job, then submit the list. Again, we
# could submit just the single job w/o the list, but submitting a list is
# good form.
listOfJobsToSubmit = []
listOfJobsToSubmit.append(job)
listOfSubmittedJobs = qb.submit(listOfJobsToSubmit)
for job in listOfSubmittedJobs:
print job['id']
if __name__ == "__main__":
main()
sys.exit(0)
|
Continue
continue to Basic python job submission III. SimpleCmd Compatibility and Application Specific Parameters