Site Tools


qiskit-job-execution

Job Submission and Results

Job submission sends a circuit (or batch of circuits) to a backend and returns a Job object for tracking. Jobs on remote backends (real hardware, cloud simulators) are queued; results arrive later. Local simulators return results immediately.

Submitting Jobs

from qiskit_aer import AerSimulator
from qiskit_ibm_runtime import QiskitRuntimeService
 
# Local simulator: synchronous
sim = AerSimulator()
result = sim.run(qc, shots=1000).result()
print(result.get_counts())
 
# Remote backend: asynchronous
service = QiskitRuntimeService()
backend = service.backend("ibmq_qx5")
job = backend.run(qc, shots=1000)
 
# Job ID is immediate; results come later
print(f"Job ID: {job.job_id()}")
 
# Wait for results (blocks until done)
result = job.result()
print(result.get_counts())

Job Status and Monitoring

Check job progress without blocking:

# Query job status
status = job.status()
print(f"Status: {status}")
 
# Get queue position
if status.name == "QUEUED":
    print(f"Queue position: {job.queue_position()}")
 
# Wait with a timeout
result = job.result(timeout=3600)  # 1-hour timeout

Batch Execution

Run multiple circuits efficiently:

circuits = [qc1, qc2, qc3, ...]
job = backend.run(circuits, shots=1000)
result = job.result()
 
# Access results per circuit
counts_0 = result.get_counts(0)  # First circuit
counts_1 = result.get_counts(1)  # Second circuit

Retrieving Past Results

Retrieve results from completed jobs:

# By job ID
completed_job = backend.retrieve_job("abc123...")
result = completed_job.result()

Remote execution has latency (queue wait + execution + classical post-processing). For iterative algorithms, consider designing circuits to evaluate multiple parameter sets per job to amortize overhead.

qiskit-job-execution.md · Last modified: by 127.0.0.1