Отримання та збереження результатів завдань
Версії пакетів
Код на цій сторінці розроблявся з використанням таких залежностей. Рекомендуємо використовувати ці або новіші версії.
qiskit-ibm-runtime~=0.45.1
Квантові робочі процеси часто виконуються досить довго і можуть охоплювати кілька сесій. Перезапуск Python-ядра призводить до втрати будь-яких результатів, збережених у пам'яті. Щоб уникнути втрати даних, можна зберігати результати у файл і отримувати результати минулих завдань з IBM Quantum® — тоді наступна сесія продовжиться з того місця, де зупинилася попередня.
Отримання результатів завдань з IBM Quantum
IBM Quantum автоматично зберігає результати кожного завдання, щоб ти міг отримати їх пізніше. Використовуй цю функцію для продовження квантових програм після перезапуску ядра та перегляду минулих результатів. Ти можеш отримати ID завдання програмно через метод job_id, або переглянути всі надіслані завдання та їх ID на сторінці Workloads.
Щоб знайти завдання програмно, використовуй метод QiskitRuntimeService.jobs. За замовчуванням він повертає найнедавніші надіслані завдання, але можна також фільтрувати за назвою бекенду, датою створення тощо. Наступна комірка знаходить усі завдання, надіслані за останні три місяці. Аргумент created_after має бути об'єктом datetime.datetime.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
import datetime
from qiskit_ibm_runtime import QiskitRuntimeService
three_months_ago = datetime.datetime.now() - datetime.timedelta(days=90)
service = QiskitRuntimeService()
jobs_in_last_three_months = service.jobs(created_after=three_months_ago)
jobs_in_last_three_months[:3] # show first three jobs
[<RuntimeJobV2('d762oo5bjrds73ed2u80', 'estimator')>,
<RuntimeJobV2('d762omnq1anc738d2cj0', 'sampler')>,
<RuntimeJobV2('d762oma3qcgc73fse6dg', 'sampler')>]
Також можна фільтрувати за бекендом, станом завдання, сесією тощо. Докладніше — у документації QiskitRuntimeService.jobs.
Отримавши ID завдання, використовуй метод QiskitRuntimeService.job, щоб отримати його.
# Get ID of most recent successful job for demonstration.
# This will not work if you've never successfully run a job.
successful_job = next(
j for j in service.jobs(limit=1000) if j.status() == "DONE"
)
job_id = successful_job.job_id()
print(job_id)
d762omnq1anc738d2cj0
retrieved_job = service.job(job_id)
retrieved_job.result()
PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray(<shape=(), num_shots=4096, num_bits=127>)), metadata={'circuit_metadata': {}})], metadata={'execution': {'execution_spans': ExecutionSpans([DoubleSliceSpan(<start='2026-03-31 20:19:56', stop='2026-03-31 20:19:58', size=4096>)])}, 'version': 2})
Збереження результатів на диск
Ти також можеш зберігати результати на диск. Для цього використовуй вбудовану бібліотеку JSON Python разом із енкодерами з Qiskit Runtime.
import json
from qiskit_ibm_runtime import RuntimeEncoder
with open("result.json", "w") as file:
json.dump(retrieved_job.result(), file, cls=RuntimeEncoder)
Потім можна завантажити цей масив з диска в окремому ядрі.
from qiskit_ibm_runtime import RuntimeDecoder
with open("result.json", "r") as file:
result = json.load(file, cls=RuntimeDecoder)
result
PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray(<shape=(), num_shots=4096, num_bits=127>)), metadata={'circuit_metadata': {}})], metadata={'execution': {'execution_spans': ExecutionSpans([DoubleSliceSpan(<start='2026-03-31 20:19:56', stop='2026-03-31 20:19:58', size=4096>)])}, 'version': 2})