jobs¶
Client API for jobs in Nexus.
- class qnexus.client.jobs.HybridStrategy(
- wait_for_status: JobStatusEnum = JobStatusEnum.COMPLETED,
- initial_interval: float = 1.0,
- max_interval_queued: float = 1200.0,
- max_interval_running: float = 180.0,
- backoff_factor: float = 2.0,
- websocket_timeout: float = 600.0,
Start with websocket, fall back to polling.
Recommended for most use cases.
- async get_status(
- job: JobRef,
Use websocket for initial period, then fall back to polling.
- Parameters:
job – The job to monitor.
wait_for_status – The status to wait for.
strategy – Hybrid strategy configuration.
- Returns:
The final JobStatus when the target status is reached or job terminates.
- class qnexus.client.jobs.PollingStrategy(
- wait_for_status: JobStatusEnum = JobStatusEnum.COMPLETED,
- initial_interval: float = 1.0,
- max_interval_queued: float = 1200.0,
- max_interval_running: float = 180.0,
- backoff_factor: float = 2.0,
Use exponential backoff polling.
More robust for long-running jobs (>10 minutes).
- async get_status(
- job: JobRef,
Poll job status with exponential backoff and adaptive intervals.
Uses different maximum poll intervals based on job state: - QUEUED: Polls less frequently (default 20 min) since queue position changes slowly - RUNNING/SUBMITTED: Polls more frequently (default 3 min) for responsiveness
- Parameters:
job – The job to monitor.
wait_for_status – The status to wait for.
strategy – Polling configuration.
- Returns:
The final JobStatus when the target status is reached or job terminates.
- enum qnexus.client.jobs.RemoteRetryStrategy(
- value,
Strategy to use when retrying jobs.
Each strategy defines how the system should approach resolving potential conflicts with remote state.
FULL_RESTART will act as though the job is entirely fresh and re-perform every action.
- Member Type:
Valid values are as follows:
- FULL_RESTART = <RemoteRetryStrategy.FULL_RESTART: 'FULL_RESTART'>¶
- class qnexus.client.jobs.WaitStrategy(
- wait_for_status: qnexus.models.job_status.JobStatusEnum = <JobStatusEnum.COMPLETED: 'COMPLETED'>,
- class qnexus.client.jobs.WebsocketStrategy(
- wait_for_status: JobStatusEnum = JobStatusEnum.COMPLETED,
Use a websocket connection for real-time updates.
Best for short-running jobs (<10 minutes).
- qnexus.client.jobs.cancel(
- job: JobRef,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Attempt cancellation of a job in Nexus.
If the job has been submitted to a backend, Nexus will request cancellation of the job.
Examples
>>> import qnexus as qnx >>> qnx.jobs.cancel(job_ref)
- qnexus.client.jobs.cost(
- job: CompileJobRef | ExecuteJobRef,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Get the HQC cost of a job from a JobRef.
Examples
>>> import qnexus as qnx >>> hqc_cost = qnx.jobs.cost(job_ref)
- qnexus.client.jobs.cost_confidence(
- job: CompileJobRef | ExecuteJobRef,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Get the HQC cost and confidence of a job from a JobRef.
Returns a list of tuples of (cost, confidence) for each job item.
- qnexus.client.jobs.delete(
- job: JobRef,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Delete a job in Nexus.
Examples
>>> import qnexus as qnx >>> qnx.jobs.delete(job_ref)
- qnexus.client.jobs.get(
- *,
- id: str | UUID | None = None,
- name: str | None = None,
- name_like: str | None = None,
- creator_email: list[str] | None = None,
- project: ProjectRef | None = None,
- properties: OrderedDict[str, bool | int | float | str] | None = None,
- job_status: list[JobStatusEnum] | None = None,
- job_type: list[JobType] | None = None,
- created_before: datetime | None = None,
- created_after: datetime | None = datetime.datetime(2023, 1, 1, 0, 0),
- modified_before: datetime | None = None,
- modified_after: datetime | None = None,
- sort_filters: list[SortFilterEnum] | None = None,
- page_number: int | None = None,
- page_size: int | None = None,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Get a single job using filters. Throws an exception if the filters do not match exactly one object.
Examples
>>> import qnexus as qnx >>> job_ref = qnx.jobs.get(name="my_compile_job", project=project_ref)
- qnexus.client.jobs.get_all(
- *,
- name_like: str | None = None,
- name_exact: list[str] | None = None,
- creator_email: list[str] | None = None,
- project: ProjectRef | None = None,
- properties: OrderedDict[str, bool | int | float | str] | None = None,
- job_status: list[JobStatusEnum] | None = None,
- job_type: list[JobType] | None = None,
- created_before: datetime | None = None,
- created_after: datetime | None = datetime.datetime(2023, 1, 1, 0, 0),
- modified_before: datetime | None = None,
- modified_after: datetime | None = None,
- sort_filters: list[SortFilterEnum] | None = None,
- page_number: int | None = None,
- page_size: int | None = None,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Get a NexusIterator over jobs with optional filters.
Examples
>>> import qnexus as qnx >>> all_jobs = qnx.jobs.get_all(project=project_ref) >>> all_jobs.df()
>>> from qnexus.models.job_status import JobStatusEnum >>> errored = qnx.jobs.get_all( ... project=project_ref, ... job_status=[JobStatusEnum.ERROR], ... )
- qnexus.client.jobs.results(
- job: CompileJobRef,
- allow_incomplete: bool = False,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
- qnexus.client.jobs.results(
- job: ExecuteJobRef,
- allow_incomplete: bool = False,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Get the ResultRefs from a JobRef, if the job is complete. To enable fetching results from Jobs with incomplete items, set allow_incomplete=True.
Examples
>>> import qnexus as qnx >>> compile_results = qnx.jobs.results(compile_job_ref) >>> for result in compile_results: ... compiled_circuit = result.get_output()
>>> execute_results = qnx.jobs.results(execute_job_ref) >>> for result in execute_results: ... backend_result = result.download_result()
- qnexus.client.jobs.retry_submission(
- job: JobRef,
- retry_status: list[JobStatusEnum] | None = None,
- remote_retry_strategy: RemoteRetryStrategy = RemoteRetryStrategy.FULL_RESTART,
- user_group: str | None = None,
Retry a job in Nexus according to status(es) or retry strategy.
By default, jobs with the ERROR status will be retried.
Examples
>>> import qnexus as qnx >>> qnx.jobs.retry_submission(job_ref)
>>> from qnexus.models.job_status import JobStatusEnum >>> qnx.jobs.retry_submission( ... job_ref, ... retry_status=[JobStatusEnum.ERROR, JobStatusEnum.CANCELLED], ... )
- qnexus.client.jobs.status(
- job: JobRef,
- scope: ScopeFilterEnum = ScopeFilterEnum.USER,
Get the status of a job.
Examples
>>> import qnexus as qnx >>> job_status = qnx.jobs.status(job_ref) >>> job_status.status <JobStatusEnum.COMPLETED: 'COMPLETED'>
- qnexus.client.jobs.wait_for(
- job: JobRef,
- wait_for_status: JobStatusEnum = JobStatusEnum.COMPLETED,
- timeout: float | None = None,
- strategy: WaitStrategy | None = None,
Check job status until the job is complete (or a specified status).
- Parameters:
job – The job to monitor.
wait_for_status – The status to wait for (default: COMPLETED).
timeout – Overall timeout in seconds. None for no timeout (default: None).
strategy –
How to monitor the job: - WebsocketStrategy(): Real-time updates via websocket.
Best for short jobs (<10 minutes).
PollingStrategy(): Exponential backoff polling. Robust for long jobs (>10 minutes).
HybridStrategy(): Websocket first, then polling fallback (default). Recommended for most use cases.
- Returns:
The final JobStatus.
- Raises:
JobError – If the job errors, is cancelled, depleted, or terminated (unless that was the status being waited for).
asyncio.TimeoutError – If the overall timeout is exceeded.
Examples
>>> import qnexus as qnx >>> from qnexus.client.jobs import PollingStrategy, HybridStrategy
>>> # Use defaults (hybrid strategy) >>> qnx.jobs.wait_for(job_ref)
>>> # Custom polling configuration >>> qnx.jobs.wait_for( ... job_ref, ... strategy=PollingStrategy(initial_interval=5.0, backoff_factor=1.5), ... )
>>> # Custom hybrid with polling fallback config >>> qnx.jobs.wait_for( ... job_ref, ... strategy=HybridStrategy( ... websocket_timeout=300.0, ... polling=PollingStrategy(max_interval_running=60.0), ... ), ... )
- enum qnexus.jobs.JobStatusEnum(
- value,
Possible job statuses
- Member Type:
Valid values are as follows:
- COMPLETED = <JobStatusEnum.COMPLETED: 'COMPLETED'>¶
- QUEUED = <JobStatusEnum.QUEUED: 'QUEUED'>¶
- SUBMITTED = <JobStatusEnum.SUBMITTED: 'SUBMITTED'>¶
- RUNNING = <JobStatusEnum.RUNNING: 'RUNNING'>¶
- CANCELLED = <JobStatusEnum.CANCELLED: 'CANCELLED'>¶
- ERROR = <JobStatusEnum.ERROR: 'ERROR'>¶
- CANCELLING = <JobStatusEnum.CANCELLING: 'CANCELLING'>¶
- RETRYING = <JobStatusEnum.RETRYING: 'RETRYING'>¶
- TERMINATED = <JobStatusEnum.TERMINATED: 'TERMINATED'>¶
- DEPLETED = <JobStatusEnum.DEPLETED: 'DEPLETED'>¶