Beispiel #1
0
    def _wait_for_job(self, timeout=60, wait=5):
        """Wait until all online ran circuits of a qobj are 'COMPLETED'.

        Args:
            timeout (float or None): seconds to wait for job. If None, wait
                indefinitely.
            wait (float): seconds between queries

        Returns:
            dict: A dict with the contents of the API request.

        Raises:
            JobTimeoutError: if the job does not return results before a specified timeout.
            JobError: if something wrong happened in some of the server API calls
        """
        start_time = time.time()
        while self.status() not in JOB_FINAL_STATES:
            elapsed_time = time.time() - start_time
            if timeout is not None and elapsed_time >= timeout:
                raise JobTimeoutError(
                    'Timeout while waiting for the job: {}'.format(self._job_id)
                )

            logger.info('status = %s (%d seconds)', self._status, elapsed_time)
            time.sleep(wait)

        if self._cancelled:
            raise JobError(
                'Job result impossible to retrieve. The job was cancelled.')

        return self._api.get_job(self._job_id)
Beispiel #2
0
    def _wait_for_job(self, timeout=60, wait=5):
        """Wait until all online ran circuits of a qobj are 'COMPLETED'.

        Args:
            timeout (float or None): seconds to wait for job. If None, wait
                indefinitely.
            wait (float): seconds between queries

        Returns:
            Result: A result object.

        Raises:
            JobTimeoutError: if the job does not return results before a specified timeout.
            JobError: if something wrong happened in some of the server API calls
        """
        start_time = time.time()
        while self.status() not in JOB_FINAL_STATES:
            elapsed_time = time.time() - start_time
            if timeout is not None and elapsed_time >= timeout:
                raise JobTimeoutError(
                    'Timeout while waiting for the job: {}'.format(self._id))

            logger.info('status = %s (%d seconds)', self._status, elapsed_time)
            time.sleep(wait)

        if self._cancelled:
            return Result({
                'id': self._id,
                'status': 'CANCELLED',
                'result': 'job cancelled'
            })

        job_data = self._api.get_job(self._id)
        job_result_list = []
        for circuit_result in job_data['qasms']:
            this_result = {
                'data': circuit_result['data'],
                'name': circuit_result.get('name'),
                'compiled_circuit_qasm': circuit_result.get('qasm'),
                'status': circuit_result['status']
            }
            if 'metadata' in circuit_result:
                this_result['metadata'] = circuit_result['metadata']

            job_result_list.append(this_result)

        return Result({
            'id': self._id,
            'status': job_data['status'],
            'used_credits': job_data.get('usedCredits'),
            'result': job_result_list,
            'backend_name': self.backend_name
        })
Beispiel #3
0
    def _wait_for_submission(self, timeout=60):
        """Waits for the request to return a job ID"""
        if self._id is None:
            if self._future is None:
                raise JobError(
                    "You have to submit before asking for status or results!")
            try:
                submit_info = self._future.result(timeout=timeout)
            except TimeoutError as ex:
                raise JobTimeoutError(
                    "Timeout waiting for the job being submitted: {}".format(
                        ex))

            if 'error' in submit_info:
                self._status = JobStatus.ERROR
                self._api_error_msg = str(submit_info['error'])
                raise JobError(str(submit_info['error']))
Beispiel #4
0
 def _wait_for_submission(self, timeout=60):
     """Waits for the request to return a job ID"""
     if self._job_id is None:
         if self._future is None:
             raise JobError("You have to submit before asking for status or results!")
         try:
             submit_info = self._future.result(timeout=timeout)
             if self._future_captured_exception is not None:
                 # pylint can't see if catch of None type
                 # pylint: disable=raising-bad-type
                 raise self._future_captured_exception
         except TimeoutError as ex:
             raise JobTimeoutError(
                 "Timeout waiting for the job being submitted: {}".format(ex)
             )
         if 'error' in submit_info:
             self._status = JobStatus.ERROR
             self._api_error_msg = str(submit_info['error'])
             raise JobError(str(submit_info['error']))