ジョブ結果を取得して保存する
このページのコードは、以下の要件に基づいて開発された。 これらのバージョンまたは新しいバージョンの使用をお勧めします。
qiskit-ibm-runtime~=0.45.1
量子のワークフローは完了までに時間がかかることが多く、多くのセッションにわたって実行されることもある。 Python カーネルを再起動するということは、メモリに保存された結果を失うということです。 データの損失を避けるために、結果をファイルに保存し、 IBM Quantum® から過去のジョブの結果を取り出すことができます。
IBM Quantum からジョブ結果を取得する
IBM Quantumは、すべてのジョブの結果を自動的に保存し、後日取り出すことができます。 この機能を使用すると、カーネルの再起動をまたいで量子プログラムを継続し、過去の結果を確認することができます。 ジョブのIDは、 job_id メソッドからプログラムで取得することができます。また、 ワークロードのページで、提出されたすべてのジョブとそのIDを確認することもできます。
プログラムで仕事を見つけるには QiskitRuntimeService.jobs メソッドを使います。 デフォルトでは、これは最近送信されたジョブを返しますが、バックエンド名、作成日などでジョブをフィルタリングすることもできます。 次のセルは、過去3ヶ月間に提出された求人情報を検索します。 created_after 引数は datetime.datetime オブジェクトでなければなりません。
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 jobsOutput:
[<RuntimeJobV2('d762oo5bjrds73ed2u80', 'estimator')>,
<RuntimeJobV2('d762omnq1anc738d2cj0', 'sampler')>,
<RuntimeJobV2('d762oma3qcgc73fse6dg', 'sampler')>]
バックエンド、ジョブの状態、セッションなどで選択することもできます。 詳細については、APIドキュメントの 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)Output:
d762omnq1anc738d2cj0
retrieved_job = service.job(job_id)
retrieved_job.result()Output:
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})
結果をディスクに保存する
また、結果をディスクに保存しておくのもよいでしょう。 これを行うには、 Python に組み込まれているJSONライブラリと、からのエンコーダーを使用します qiskit-ibm-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)
resultOutput:
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})