Versions Compared

    Key

    • This line was added.
    • This line was removed.
    • Formatting was changed.
    Comment: Migrated to Confluence 5.3

    To begin we will go through a simple job submission.  In this example, we will submit a job that runs a single command (in this case, the command "hostname") on one worker.  This is the simplest form of job submission.

    Below is the code with commented explanations of its contents 

    Code Block
    languagepython
    #!/usr/bin/python
    
    # Below are required imports for the script to run
    import os, sys
    
    # The next few lines attempt to import the Qube API. If the path to the qb module
    # is not in $PATH or $PYTHONPATH, we will attempt to find it by looking in known
    # locations
    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
    
    # Below is the main function to run in this script 
    def main():
        
    	# Below creates an empty dictionary to be filled by the following lines of code 
        job = {}
        
    	# Below defines the name of the Qube! job.  This is the name that will be 
    	# displayed in the GUI and through the command line tools 
        job['name'] = 'python test job'
        
    	# Below defines how many Instances/subjobs the job is to spawn.  Because we 
    	# will be running only a single command, there is no need to request more than 1.  
        job['cpus'] = 1
        
    	# Below defines the internal Qube! jobtype to be used to execute the job.
    	# 'cmdline' tells Qube that on the backend, we will execute a single command line 
    	# command.  This will be the same as opening a terminal/command prompt and typing
    	# out a command.
        job['prototype'] = 'cmdline'
        
        
    	# The below parameters are explained further in the "Job submission with job 
    	# package explained" page
        package = {}
    	package['cmdline'] = 'hostname'
        job['package'] = package
        
    	# Below creates an empty list filled by the following lines of code.
        listOfJobsToSubmit = []
        
    	# Below evaluates the jobs to be submitted and adds the to the above list 
        listOfJobsToSubmit.append(job)
        
    	# Below calls the list of jobs to be submitted and then prints the job IDs for each
    	# While it is not strictly necessary that one submits a list of jobs, it is a good
    	# habit to start, so we will only submit lists of jobs.  It is, however, perfectly
    	# acceptable to qb.submit(job)
        listOfSubmittedJobs = qb.submit(listOfJobsToSubmit)
        for job in listOfSubmittedJobs:
            print job['id']
    
    # Below runs the "main" function 
    if __name__ == "__main__":
        main()
        sys.exit(0)
    
    

     

    This example and others like it can be found in:

    • Windows - C:\Program Files\pfx\qube\examples
    • OS X - /Application/pfx/qube/examples
    • Linux - /usr/local/pfx/qube/examples

     

    Continue to Basic python job submission II. Frames