Recupera e salva i risultati del lavoro
Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.
qiskit-ibm-runtime~=0.45.1
I flussi di lavoro Quantum spesso richiedono molto tempo per essere completati e possono essere eseguiti in più sessioni. Il riavvio del kernel Python comporta la perdita dei risultati memorizzati. Per evitare la perdita di dati, è possibile salvare i risultati su file e recuperare i risultati dei lavori passati da IBM Quantum®, in modo che la sessione successiva possa continuare da dove è stata interrotta.
Recupera i risultati di lavoro da IBM Quantum
IBM Quantum memorizza automaticamente i risultati di ogni lavoro per poterli recuperare in un secondo momento. Questa funzione consente di continuare a utilizzare i programmi quantistici anche dopo il riavvio del kernel e di rivedere i risultati ottenuti in passato. È possibile ottenere l'ID di un lavoro in modo programmatico attraverso il suo metodo job_id , oppure è possibile vedere tutti i lavori inviati e i loro ID nella pagina Carichi di lavoro.
Per trovare un lavoro in modo programmatico, utilizzare il metodo QiskitRuntimeService.jobs metodo. Per impostazione predefinita, vengono visualizzati i lavori inviati più di recente, ma è anche possibile filtrare i lavori per nome del backend, data di creazione e altro ancora. La cella seguente individua i lavori presentati negli ultimi tre mesi. L'argomento created_after deve essere un datetime.datetime oggetto.
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')>]
È inoltre possibile selezionare per backend, stato del lavoro, sessione e altro ancora. Per ulteriori informazioni, vedere QiskitRuntimeService.jobs nella documentazione dell'API.
Una volta ottenuto l'ID del lavoro, utilizzare il metodo QiskitRuntimeService.job per recuperarlo.
# 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})
Salva i risultati su disco
Potresti anche voler salvare i risultati su disco. Per farlo, usa la libreria JSON integrata di Python con gli encoder di 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)È quindi possibile caricare questo array dal disco in un kernel separato.
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})