> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-serverless-sft-revamp.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# util

> weave.trace.util の Python SDK リファレンス

export const SourceLink = ({url}) => <a href={url} target="_blank" rel="noopener noreferrer" className="source-link">
    Source
  </a>;

# API 概要

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L100" />

## <kbd>class</kbd> `ContextAwareThread`

呼び出し元のコンテキストで関数を実行するスレッドです。

これは `threading.Thread` のドロップインリプレイスメントであり、スレッド内での呼び出しが期待通りに動作することを保証します。 Weave は特定の `contextvars` が設定されている必要があります（`call_context.py` を参照）が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。これは好ましくありません。このクラスは `contextvar` のコピーを自動化し、このスレッドを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。

このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。

```python theme={null}
def run_with_context(func, *args, **kwargs):
     context = copy_context()
     def wrapper():
         context.run(func, *args, **kwargs)
     return wrapper

thread = threading.Thread(target=run_with_context(your_func, *args, **kwargs))
thread.start()
```

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L124" />

### <kbd>method</kbd> `__init__`

```python theme={null}
__init__(*args: 'Any', **kwargs: 'Any') → None
```

***

#### <kbd>property</kbd> daemon

このスレッドがデーモンスレッドであるかどうかを示すブール 値 です。

これは `start()` が呼び出される前に設定する必要があり、そうでない場合は `RuntimeError` が発生します。初期値は作成元のスレッドから継承されます。メインスレッドはデーモンスレッドではないため、メインスレッドで作成されたすべてのスレッドのデフォルトは `daemon = False` になります。

デーモンスレッドのみが残った時点で、Python プログラム全体が終了します。

***

#### <kbd>property</kbd> ident

このスレッドのスレッド識別子、または開始されていない場合は `None` です。

これは 0 以外の整数です。 `get_ident()` 関数を参照してください。スレッド識別子は、スレッドが終了して別のスレッドが作成されたときに再利用されることがあります。識別子はスレッドが終了した後でも利用可能です。

***

#### <kbd>property</kbd> name

識別目的のみに使用される文字列です。

セマンティクスはありません。複数のスレッドに同じ名前を付けることができます。初期名はコンストラクタによって設定されます。

***

#### <kbd>property</kbd> native\_id

このスレッドのネイティブな整数スレッド ID、または開始されていない場合は `None` です。

これは非負の整数です。 `get_native_id()` 関数を参照してください。これはカーネルによって報告されるスレッド ID を表します。

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L128" />

### <kbd>method</kbd> `run`

```python theme={null}
run() → None
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L40" />

## <kbd>class</kbd> `ContextAwareThreadPoolExecutor`

呼び出し元のコンテキストで関数を実行する `ThreadPoolExecutor` です。

これは `concurrent.futures.ThreadPoolExecutor` のドロップインリプレイスメントであり、エグゼキューター内での Weave の呼び出しが期待通りに動作することを保証します。 Weave は特定の `contextvars` が設定されている必要があります（`call_context.py` を参照）が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。このクラスは `contextvar` のコピーを自動化し、このエグゼキューターを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。

このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。

```python theme={null}
with concurrent.futures.ThreadPoolExecutor() as executor:
     contexts = [copy_context() for _ in range(len(vals))]

     def _wrapped_fn(*args):
         return contexts.pop().run(fn, *args)

     executor.map(_wrapped_fn, vals)
```

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L63" />

### <kbd>method</kbd> `__init__`

```python theme={null}
__init__(*args: 'Any', **kwargs: 'Any') → None
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L72" />

### <kbd>method</kbd> `map`

```python theme={null}
map(
    fn: 'Callable',
    *iterables: 'Iterable[Any]',
    timeout: 'float | None' = None,
    chunksize: 'int' = 1
) → Iterator
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L68" />

### <kbd>method</kbd> `submit`

```python theme={null}
submit(fn: 'Callable', *args: 'Any', **kwargs: 'Any') → Any
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L100" />

## <kbd>class</kbd> `ContextAwareThread`

呼び出し元のコンテキストで関数を実行するスレッドです。

これは `threading.Thread` のドロップインリプレイスメントであり、スレッド内での呼び出しが期待通りに動作することを保証します。 Weave は特定の `contextvars` が設定されている必要があります（`call_context.py` を参照）が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。このクラスは `contextvar` のコピーを自動化し、このスレッドを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。

このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。

```python theme={null}
def run_with_context(func, *args, **kwargs):
     context = copy_context()
     def wrapper():
         context.run(func, *args, **kwargs)
     return wrapper

thread = threading.Thread(target=run_with_context(your_func, *args, **kwargs))
thread.start()
```

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L124" />

### <kbd>method</kbd> `__init__`

```python theme={null}
__init__(*args: 'Any', **kwargs: 'Any') → None
```

***

#### <kbd>property</kbd> daemon

このスレッドがデーモンスレッドであるかどうかを示すブール 値 です。

これは `start()` が呼び出される前に設定する必要があり、そうでない場合は `RuntimeError` が発生します。初期値は作成元のスレッドから継承されます。メインスレッドはデーモンスレッドではないため、メインスレッドで作成されたすべてのスレッドのデフォルトは `daemon = False` になります。

デーモンスレッドのみが残った時点で、Python プログラム全体が終了します。

***

#### <kbd>property</kbd> ident

このスレッドのスレッド識別子、または開始されていない場合は `None` です。

これは 0 以外の整数です。 `get_ident()` 関数を参照してください。スレッド識別子は、スレッドが終了して別のスレッドが作成されたときに再利用されることがあります。識別子はスレッドが終了した後でも利用可能です。

***

#### <kbd>property</kbd> name

識別目的のみに使用される文字列です。

セマンティクスはありません。複数のスレッドに同じ名前を付けることができます。初期名はコンストラクタによって設定されます。

***

#### <kbd>property</kbd> native\_id

このスレッドのネイティブな整数スレッド ID、または開始されていない場合は `None` です。

これは非負の整数です。 `get_native_id()` 関数を参照してください。これはカーネルによって報告されるスレッド ID を表します。

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L128" />

### <kbd>method</kbd> `run`

```python theme={null}
run() → None
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L40" />

## <kbd>class</kbd> `ContextAwareThreadPoolExecutor`

呼び出し元のコンテキストで関数を実行する `ThreadPoolExecutor` です。

これは `concurrent.futures.ThreadPoolExecutor` のドロップインリプレイスメントであり、エグゼキューター内での Weave の呼び出しが期待通りに動作することを保証します。 Weave は特定の `contextvars` が設定されている必要があります（`call_context.py` を参照）が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。このクラスは `contextvar` のコピーを自動化し、このエグゼキューターを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。

このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。

```python theme={null}
with concurrent.futures.ThreadPoolExecutor() as executor:
     contexts = [copy_context() for _ in range(len(vals))]

     def _wrapped_fn(*args):
         return contexts.pop().run(fn, *args)

     executor.map(_wrapped_fn, vals)
```

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L63" />

### <kbd>method</kbd> `__init__`

```python theme={null}
__init__(*args: 'Any', **kwargs: 'Any') → None
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L72" />

### <kbd>method</kbd> `map`

```python theme={null}
map(
    fn: 'Callable',
    *iterables: 'Iterable[Any]',
    timeout: 'float | None' = None,
    chunksize: 'int' = 1
) → Iterator
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L68" />

### <kbd>method</kbd> `submit`

```python theme={null}
submit(fn: 'Callable', *args: 'Any', **kwargs: 'Any') → Any
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L159" />

### <kbd>function</kbd> `deprecated`

```python theme={null}
deprecated(new_name: 'str') → Callable[[Callable[, Any]], Callable[, Any]]
```

関数を非推奨としてマークし、ユーザーを `new_name` にリダイレクトするためのデコレータです。

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L132" />

### <kbd>function</kbd> `is_colab`

```python theme={null}
is_colab()
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L141" />

### <kbd>function</kbd> `is_notebook`

```python theme={null}
is_notebook() → bool
```

***

<SourceLink url="https://github.com/wandb/weave/blob/v0.52.24/weave/trace/util.py#L16" />

### <kbd>function</kbd> `log_once`

```python theme={null}
log_once(log_method: 'Callable[[str], None]', message: 'str') → None
```

メッセージを一度だけ ログ に記録し、同じタイプの後続のメッセージを抑制します。これは、ログ を大量に発生させることなく、エラーについて ユーザー に通知するのに便利です。

これは主に、同じエラーメッセージが何度も発生する可能性がある場合に役立ちます。例えば、op の保存に失敗した場合、その op が呼び出されるたびに発生する可能性が高いです。また、パッチを適用したイテレータにエラーがある場合、 結果 を反復処理するたびに発生する可能性があります。これにより、ログ を詰まらせることなく、エラーについて ユーザー に 情報 を提供できます。

**引数:**

* <b>`log_method`</b>: メッセージの ログ 記録に使用する メソッド。これは文字列の 引数 を受け取る必要があります。
* <b>`message`</b>: ログ 記録するメッセージ。
  **例:**

```python theme={null}
log_once(logger.error, "Failed to save op")
```
