---
title: results
sidebarTitle: results
---

# `prefect.results`

## Functions

### `DEFAULT_STORAGE_KEY_FN` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L69" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
DEFAULT_STORAGE_KEY_FN() -> str
```

### `aget_default_result_storage` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L79" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
aget_default_result_storage() -> WritableFileSystem
```


Generate a default file system for result storage.


### `get_default_result_storage` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L103" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
get_default_result_storage() -> WritableFileSystem
```


Generate a default file system for result storage.


### `aresolve_result_storage` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L128" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
aresolve_result_storage(result_storage: ResultStorage | UUID | Path) -> WritableFileSystem
```


Resolve one of the valid `ResultStorage` input types into a saved block
document id and an instance of the block.


### `resolve_result_storage` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L165" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
resolve_result_storage(result_storage: ResultStorage | UUID | Path) -> WritableFileSystem
```


Resolve one of the valid `ResultStorage` input types into a saved block
document id and an instance of the block.


### `resolve_serializer` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L200" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
resolve_serializer(serializer: ResultSerializer) -> Serializer
```


Resolve one of the valid `ResultSerializer` input types into a serializer
instance.


### `get_or_create_default_task_scheduling_storage` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L216" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
get_or_create_default_task_scheduling_storage() -> ResultStorage
```


Generate a default file system for background task parameter/result storage.


### `get_default_result_serializer` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L234" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
get_default_result_serializer() -> Serializer
```


Generate a default file system for result storage.


### `get_default_persist_setting` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L242" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
get_default_persist_setting() -> bool
```


Return the default option for result persistence.


### `get_default_persist_setting_for_tasks` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L250" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
get_default_persist_setting_for_tasks() -> bool
```


Return the default option for result persistence for tasks.


### `should_persist_result` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L262" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
should_persist_result() -> bool
```


Return the default option for result persistence determined by the current run context.

If there is no current run context, the value of `results.persist_by_default` on the
current settings will be returned.


### `default_cache` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L291" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
default_cache() -> LRUCache[str, 'ResultRecord[Any]']
```

### `result_storage_discriminator` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L295" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
result_storage_discriminator(x: Any) -> str
```

### `get_result_store` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L967" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
get_result_store() -> ResultStore
```


Get the current result store.


## Classes

### `ResultStore` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L308" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>


Manages the storage and retrieval of results.

**Attributes:**
- `result_storage`: The storage for result records. If not provided, the default
result storage will be used.
- `metadata_storage`: The storage for result record metadata. If not provided,
the metadata will be stored alongside the results.
- `lock_manager`: The lock manager to use for locking result records. If not provided,
the store cannot be used in transactions with the SERIALIZABLE isolation level.
- `cache_result_in_memory`: Whether to cache results in memory.
- `serializer`: The serializer to use for results.
- `storage_key_fn`: The function to generate storage keys.


**Methods:**

#### `aacquire_lock` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L871" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
aacquire_lock(self, key: str, holder: str | None = None, timeout: float | None = None) -> bool
```

Acquire a lock for a result record.

**Args:**
- `key`: The key to acquire the lock for.
- `holder`: The holder of the lock. If not provided, a default holder based on the
current host, process, and thread will be used.
- `timeout`: The timeout for the lock.

**Returns:**
- True if the lock was successfully acquired; False otherwise.


#### `acquire_lock` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L848" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
acquire_lock(self, key: str, holder: str | None = None, timeout: float | None = None) -> bool
```

Acquire a lock for a result record.

**Args:**
- `key`: The key to acquire the lock for.
- `holder`: The holder of the lock. If not provided, a default holder based on the
current host, process, and thread will be used.
- `timeout`: The timeout for the lock.

**Returns:**
- True if the lock was successfully acquired; False otherwise.


#### `aexists` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L526" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
aexists(self, key: str) -> bool
```

Check if a result record exists in storage.

**Args:**
- `key`: The key to check for the existence of a result record.

**Returns:**
- True if the result record exists, False otherwise.


#### `apersist_result_record` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L815" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
apersist_result_record(self, result_record: 'ResultRecord[Any]', holder: str | None = None) -> None
```

Persist a result record to storage.

**Args:**
- `result_record`: The result record to persist.


#### `aread` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L631" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
aread(self, key: str, holder: str | None = None) -> 'ResultRecord[Any]'
```

Read a result record from storage.

**Args:**
- `key`: The key to read the result record from.
- `holder`: The holder of the lock if a lock was set on the record.

**Returns:**
- A result record.


#### `await_for_lock` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L955" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
await_for_lock(self, key: str, timeout: float | None = None) -> bool
```

Wait for the corresponding transaction record to become free.


#### `awrite` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L713" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
awrite(self, obj: Any, key: str | None = None, expiration: DateTime | None = None, holder: str | None = None) -> None
```

Write a result to storage.

**Args:**
- `key`: The key to write the result record to.
- `obj`: The object to write to storage.
- `expiration`: The expiration time for the result record.
- `holder`: The holder of the lock if a lock was set on the record.


#### `create_result_record` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L649" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
create_result_record(self, obj: Any, key: str | None = None, expiration: DateTime | None = None) -> 'ResultRecord[Any]'
```

Create a result record.

**Args:**
- `key`: The key to create the result record for.
- `obj`: The object to create the result record for.
- `expiration`: The expiration time for the result record.


#### `exists` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L514" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
exists(self, key: str) -> bool
```

Check if a result record exists in storage.

**Args:**
- `key`: The key to check for the existence of a result record.

**Returns:**
- True if the result record exists, False otherwise.


#### `generate_default_holder` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L450" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
generate_default_holder() -> str
```

Generate a default holder string using hostname, PID, and thread ID.

**Returns:**
- A unique identifier string.


#### `is_lock_holder` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L924" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
is_lock_holder(self, key: str, holder: str | None = None) -> bool
```

Check if the current holder is the lock holder for the result record.

**Args:**
- `key`: The key to check the lock for.
- `holder`: The holder of the lock. If not provided, a default holder based on the
current host, process, and thread will be used.

**Returns:**
- True if the current holder is the lock holder; False otherwise.


#### `is_locked` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L913" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
is_locked(self, key: str) -> bool
```

Check if a result record is locked.


#### `persist_result_record` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L801" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
persist_result_record(self, result_record: 'ResultRecord[Any]', holder: str | None = None) -> None
```

Persist a result record to storage.

**Args:**
- `result_record`: The result record to persist.


#### `read` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L613" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
read(self, key: str, holder: str | None = None) -> 'ResultRecord[Any]'
```

Read a result record from storage.

**Args:**
- `key`: The key to read the result record from.
- `holder`: The holder of the lock if a lock was set on the record.

**Returns:**
- A result record.


#### `release_lock` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L895" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
release_lock(self, key: str, holder: str | None = None) -> None
```

Release a lock for a result record.

**Args:**
- `key`: The key to release the lock for.
- `holder`: The holder of the lock. Must match the holder that acquired the lock.
If not provided, a default holder based on the current host, process, and
thread will be used.


#### `result_storage_block_id` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L342" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
result_storage_block_id(self) -> UUID | None
```

#### `supports_isolation_level` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L829" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
supports_isolation_level(self, level: 'IsolationLevel') -> bool
```

Check if the result store supports a given isolation level.

**Args:**
- `level`: The isolation level to check.

**Returns:**
- True if the isolation level is supported, False otherwise.


#### `update_for_flow` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L373" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
update_for_flow(self, flow: 'Flow[..., Any]') -> Self
```

Create a new result store for a flow with updated settings.

**Args:**
- `flow`: The flow to update the result store for.

**Returns:**
- An updated result store.


#### `update_for_task` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L397" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
update_for_task(self: Self, task: 'Task[P, R]') -> Self
```

Create a new result store for a task.

**Args:**
- `task`: The task to update the result store for.

**Returns:**
- An updated result store.


#### `wait_for_lock` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L944" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
wait_for_lock(self, key: str, timeout: float | None = None) -> bool
```

Wait for the corresponding transaction record to become free.


#### `write` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/results.py#L686" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
write(self, obj: Any, key: str | None = None, expiration: DateTime | None = None, holder: str | None = None) -> None
```

Write a result to storage.

Handles the creation of a `ResultRecord` and its serialization to storage.

**Args:**
- `key`: The key to write the result record to.
- `obj`: The object to write to storage.
- `expiration`: The expiration time for the result record.
- `holder`: The holder of the lock if a lock was set on the record.

