{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "ef283f37-0ad4-48c7-bb92-8a09baaae6e5",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Job-Ergebnisse abrufen und speichern\"\n",
        "description: \"Wie man job_id verwendet, um Ergebnisse abzurufen, und wie man Ergebnisse auf der Festplatte speichert.\"\n",
        "---\n",
        "\n",
        "<span id=\"retrieve-and-save-job-results\" />\n",
        "\n",
        "# Job-Ergebnisse abrufen und speichern\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f4471d6b-dc12-486c-95de-22ac12e367d2",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "{/*\n",
        "  DO NOT EDIT THIS CELL!!!\n",
        "  This cell's content is generated automatically by a script. Anything you add\n",
        "  here will be removed next time the notebook is run. To add new content, create\n",
        "  a new cell before or after this one.\n",
        "  */}\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Paketversionen\">\n",
        "    Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt.\n",
        "    Wir empfehlen die Verwendung dieser oder neuerer Versionen.\n",
        "\n",
        "    ```\n",
        "    qiskit-ibm-runtime~=0.45.1\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ec8277ad-1811-4318-8282-84d6d282bb17",
      "metadata": {},
      "source": [
        "Quantum-Workflows dauern oft eine Weile und können sich über mehrere Sitzungen erstrecken. Wenn Sie Ihren Python Kernel neu starten, gehen alle im Speicher abgelegten Ergebnisse verloren. Um Datenverluste zu vermeiden, können Sie die Ergebnisse in einer Datei speichern und die Ergebnisse früherer Aufträge unter IBM Quantum® abrufen, damit Sie bei der nächsten Sitzung dort weitermachen können, wo Sie aufgehört haben.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d32e82e4-331c-43ec-ac86-a657f29f1469",
      "metadata": {},
      "source": [
        "<span id=\"retrieve-job-results-from-ibm-quantum\" />\n",
        "\n",
        "## Abrufen von Job-Ergebnissen von IBM Quantum\n",
        "\n",
        "IBM Quantum speichert automatisch die Ergebnisse jedes Auftrags, so dass Sie diese zu einem späteren Zeitpunkt abrufen können. Mit dieser Funktion können Sie Quantum-Programme über Kernel-Neustarts hinweg fortsetzen und frühere Ergebnisse überprüfen. Sie können die ID eines Auftrags programmatisch über die Methode `job_id` abrufen, oder Sie können alle Ihre eingereichten Aufträge und deren IDs auf der [Seite Workloads](/workloads) einsehen.\n",
        "\n",
        "Um eine Stelle programmatisch zu suchen, verwenden Sie die [`QiskitRuntimeService.jobs`](/docs/api/qiskit-ibm-runtime/qiskit-runtime-service#jobs) methode. Standardmäßig werden hier die zuletzt übermittelten Aufträge angezeigt, aber Sie können Aufträge auch nach Backend-Name, Erstellungsdatum und anderen Kriterien filtern. In der folgenden Zelle finden Sie alle in den letzten drei Monaten eingereichten Stellenangebote. Das Argument `created_after` muss ein [`datetime.datetime`](https://docs.python.org/3.8/library/datetime.html#datetime.datetime) objekt sein.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "bd46b47b-e9ff-4da3-9ded-30dd3baee7c0",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<RuntimeJobV2('d762oo5bjrds73ed2u80', 'estimator')>,\n",
              " <RuntimeJobV2('d762omnq1anc738d2cj0', 'sampler')>,\n",
              " <RuntimeJobV2('d762oma3qcgc73fse6dg', 'sampler')>]"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import datetime\n",
        "from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "\n",
        "three_months_ago = datetime.datetime.now() - datetime.timedelta(days=90)\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "jobs_in_last_three_months = service.jobs(created_after=three_months_ago)\n",
        "jobs_in_last_three_months[:3]  # show first three jobs"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "418755af-ddf1-4702-9c83-df23d29982f3",
      "metadata": {},
      "source": [
        "Sie können auch nach Backend, Auftragsstatus, Sitzung und mehr auswählen. Für weitere Informationen siehe [`QiskitRuntimeService.jobs`](/docs/api/qiskit-ibm-runtime/qiskit-runtime-service#jobs) in der API-Dokumentation.\n",
        "\n",
        "Sobald Sie die Job-ID haben, verwenden Sie die [`QiskitRuntimeService.job`](/docs/api/qiskit-ibm-runtime/qiskit-runtime-service#job) methode, um sie abzurufen.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "bd1fc5a5-ad29-4805-91e5-fe70cdbc4540",
      "metadata": {
        "tags": [
          "ignore-warnings"
        ]
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "d762omnq1anc738d2cj0\n"
          ]
        }
      ],
      "source": [
        "# Get ID of most recent successful job for demonstration.\n",
        "# This will not work if you've never successfully run a job.\n",
        "successful_job = next(\n",
        "    j for j in service.jobs(limit=1000) if j.status() == \"DONE\"\n",
        ")\n",
        "job_id = successful_job.job_id()\n",
        "print(job_id)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "850780cc-4c91-4eec-9d46-2b2cbcd9157e",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "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})"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "retrieved_job = service.job(job_id)\n",
        "retrieved_job.result()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f3bccdba-29c5-405b-96e2-65f4fe4ffadd",
      "metadata": {},
      "source": [
        "<span id=\"save-results-to-disk\" />\n",
        "\n",
        "## Ergebnisse auf Festplatte speichern\n",
        "\n",
        "Möglicherweise möchten Sie die Ergebnisse auch auf der Festplatte speichern. Verwenden Sie dazu die in Python integrierte JSON-Bibliothek mit Encodern aus `qiskit-ibm-runtime`.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "1892f8f7-ff0f-4ed2-bba9-a336c23315af",
      "metadata": {},
      "outputs": [],
      "source": [
        "import json\n",
        "from qiskit_ibm_runtime import RuntimeEncoder\n",
        "\n",
        "with open(\"result.json\", \"w\") as file:\n",
        "    json.dump(retrieved_job.result(), file, cls=RuntimeEncoder)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8fdddde9-2c05-481b-84c8-d3b7fcf70120",
      "metadata": {},
      "source": [
        "Sie können dieses Array dann in einem separaten Kernel von der Festplatte laden.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "71d963dd-3b66-4226-be7b-c69bc89af28e",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "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})"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit_ibm_runtime import RuntimeDecoder\n",
        "\n",
        "with open(\"result.json\", \"r\") as file:\n",
        "    result = json.load(file, cls=RuntimeDecoder)\n",
        "\n",
        "result"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}