Monitor or cancel a job
Die Siite isch nonig ibersetzt worre. Ihr luege d englischi Originalversion aa.
View a list of your workloads on the Workloads page.
View job status
Go to your Workloads table and check under the Status column for whether a job has completed or failed.
Why a job stays "In progress"
You might notice that a job you expect to take only a few seconds stays in the In progress status (called RUNNING in Qiskit) for much longer. This is normal, and it does not mean the job is consuming that entire time as usage. It happens because of how jobs are scheduled onto a QPU:
- Every job requires classical pre-processing before it can run on the QPU. A job moves to In progress (
RUNNING) as soon as this classical processing begins — not when it starts executing on the QPU. - Most of this classical processing runs in parallel, so multiple jobs can be In progress at the same time.
- However, only one job at a time can run on the QPU. When several jobs finish their classical processing and are ready to execute, they must wait their turn for the QPU. This is known as QPU contention. When contention is high, a job can remain In progress noticeably longer than the few seconds of QPU time it actually needs.
- Contention can also occur when a system-maintenance task, such as calibration, is running on the QPU. Your job stays In progress until the maintenance task completes and the QPU becomes available.
Because of this, the elapsed wall-clock time a job spends In progress is not the same as its usage. Both the estimated usage and the maximum execution time are based only on the time the QPU is locked to execute your job, and therefore exclude the multi-threaded classical processing described above. A long In progress time does not increase your reported usage or cost.
Session mode is different
The preceding behavior applies to job mode and batch mode. In session mode, during the session's active window the user has exclusive access of the system and no other jobs can run, which includes calibration jobs. Therefore, any QPU contention happens only among your own session jobs. In addition, session usage is measured as the elapsed time while the session remains active, because QPU capacity is reserved for the duration of the session, regardless of whether jobs are actively running. See Workload usage for more information.
View remaining usage
Go to your Instances table and select the tab associated with the plan you want to view remaining usage for. Total time used and total time remaining on your plan is displayed.
View metrics on number of jobs and workloads submitted
Go to the Analytics page to see the total number of jobs submitted, as well as a count of batch workloads and session workloads. Note that you can only see the Analytics page for accounts that you own or manage.
Monitor a job
Use the job instance to check the job status or retrieve the results by calling the appropriate command:
| job.result() | Review job results immediately after the job completes. Job results are available after the job completes. Therefore, job.result() is a blocking call until the job completes. |
| job.job_id() | Return the ID that uniquely identifies that job. Retrieving the job results at a later time requires the job ID. Therefore, it is recommended that you save the IDs of jobs you might want to retrieve later. |
| job.status() | Check the job status. |
| job = service.job(<job_id>) | Retrieve a job you previously submitted. This call requires the job ID. |
Retrieve job results at a later time
Call service.job(\<job\_id>) to retrieve a job you previously submitted. If you don't have the job ID, or if you want to retrieve multiple jobs at once; including jobs from retired QPUs (quantum processing units), call service.jobs() with optional filters instead. See QiskitRuntimeService.jobs.
service.jobs() also returns jobs run from the deprecated qiskit-ibm-provider package. Jobs submitted by the older (also deprecated) qiskit-ibmq-provider package are no longer available.
Example
This example returns the 10 most recent runtime jobs that were run on my_backend:
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
# This cell is hidden from users
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2
import numpy as np
my_backend = "ibm_torino"
service = QiskitRuntimeService()
# backend = service.backend(my_backend)
backend = service.least_busy()
# Define two circuits, each with one parameter with two parameters.
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.ry(Parameter("a"), 0)
circuit.cx(0, 1)
circuit.h(0)
circuit.measure_all()
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
transpiled_circuit = pm.run(circuit)
params = np.random.uniform(size=(2, 3)).T
sampler_pub = (transpiled_circuit, params)
# Instantiate the new Estimator object, then run the transpiled circuit
# using the set of parameters and observables.
sampler = SamplerV2(mode=backend)
job = sampler.run([sampler_pub], shots=4)
print(job.job_id())
d305ck0ocacs73ajagvg
result = job.result()
spans = job.result().metadata["execution"]["execution_spans"]
print(spans)
ExecutionSpans([DoubleSliceSpan(<start='2025-09-09 16:31:16', stop='2025-09-09 16:31:16', size=24>)])
params = np.random.uniform(size=(2, 3))
params
array([[0.2260416 , 0.8747859 , 0.44361995],
[0.94700856, 0.96826017, 0.98426562]])
mask = spans[0].mask(0)
mask
array([[[ True, True, True, True],
[ True, True, True, True]],
[[ True, True, True, True],
[ True, True, True, True]],
[[ True, True, True, True],
[ True, True, True, True]]])
from qiskit_ibm_runtime import QiskitRuntimeService
# Initialize the account first.
service = QiskitRuntimeService()
# Use `limit` to retrieve a specific number of jobs. The default `limit` is 10.
service.jobs(backend_name=my_backend)
Cancel a job
You can cancel a job from the IBM Quantum Platform dashboard either on the Workloads page or the details page for a specific workload. On the Workloads page, click the overflow menu at the end of the row for that workload, and select Cancel. If you are on the details page for a specific workload, use the Actions dropdown at the top of the page, and select Cancel.
In Qiskit, use job.cancel() to cancel a job.
Next steps
- Try the Grover's algorithm tutorial.
- Learn more about Sampler execution spans