Récupérer et enregistrer les résultats des tâches
Le code de cette page a été développé en tenant compte des exigences suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.
qiskit-ibm-runtime~=0.45.1
Les flux de travail quantiques prennent souvent du temps et peuvent se dérouler sur plusieurs sessions. Si vous redémarrez votre noyau Python, vous perdrez tous les résultats stockés en mémoire. Pour éviter la perte de données, vous pouvez enregistrer les résultats dans un fichier et récupérer les résultats des travaux antérieurs à partir de IBM Quantum® afin que votre prochaine session puisse reprendre là où vous vous êtes arrêté.
Récupérer les résultats d'un travail à partir d' IBM Quantum
IBM Quantum enregistre automatiquement les résultats de chaque travail pour que vous puissiez les consulter ultérieurement. Cette fonction permet de poursuivre les programmes quantiques lors des redémarrages du noyau et de consulter les résultats antérieurs. Vous pouvez obtenir l'ID d'un travail de manière programmatique par le biais de sa méthode job_id , ou vous pouvez voir tous les travaux soumis et leur ID sur la page Workloads.
Pour rechercher un emploi par programme, utilisez la méthode QiskitRuntimeService.jobs méthode. Par défaut, cette option renvoie les travaux les plus récemment soumis, mais vous pouvez également filtrer les travaux par nom de backend, date de création, etc. La cellule suivante recherche les offres d'emploi soumises au cours des trois derniers mois. L'argument created_after doit être un datetime.datetime objet.
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')>]
Vous pouvez également effectuer une sélection par backend, état du travail, session, etc. Pour plus d'informations, voir QiskitRuntimeService.jobs dans la documentation de l'API.
Une fois que vous avez l'identifiant du travail, utilisez la méthode QiskitRuntimeService.job pour le récupérer.
# 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})
Enregistrer les résultats sur le disque
Vous pouvez également enregistrer les résultats sur le disque dur. Pour ce faire, utilisez la bibliothèque JSON intégrée à Python avec les encodeurs de 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)Vous pouvez ensuite charger cette matrice à partir du disque dans un noyau séparé.
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})