メインコンテンツへスキップ

API 概要


Source

class ContextAwareThread

呼び出し元のコンテキストで関数を実行するスレッドです。 これは threading.Thread のドロップインリプレイスメントであり、スレッド内での呼び出しが期待通りに動作することを保証します。 Weave は特定の contextvars が設定されている必要があります(call_context.py を参照)が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。これは好ましくありません。このクラスは contextvar のコピーを自動化し、このスレッドを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。 このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。
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()
Source

method __init__

__init__(*args: 'Any', **kwargs: 'Any') → None

property daemon

このスレッドがデーモンスレッドであるかどうかを示すブール 値 です。 これは start() が呼び出される前に設定する必要があり、そうでない場合は RuntimeError が発生します。初期値は作成元のスレッドから継承されます。メインスレッドはデーモンスレッドではないため、メインスレッドで作成されたすべてのスレッドのデフォルトは daemon = False になります。 デーモンスレッドのみが残った時点で、Python プログラム全体が終了します。

property ident

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

property name

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

property native_id

このスレッドのネイティブな整数スレッド ID、または開始されていない場合は None です。 これは非負の整数です。 get_native_id() 関数を参照してください。これはカーネルによって報告されるスレッド ID を表します。
Source

method run

run() → None

Source

class ContextAwareThreadPoolExecutor

呼び出し元のコンテキストで関数を実行する ThreadPoolExecutor です。 これは concurrent.futures.ThreadPoolExecutor のドロップインリプレイスメントであり、エグゼキューター内での Weave の呼び出しが期待通りに動作することを保証します。 Weave は特定の contextvars が設定されている必要があります(call_context.py を参照)が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。このクラスは contextvar のコピーを自動化し、このエグゼキューターを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。 このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。
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)
Source

method __init__

__init__(*args: 'Any', **kwargs: 'Any') → None

Source

method map

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

Source

method submit

submit(fn: 'Callable', *args: 'Any', **kwargs: 'Any') → Any

Source

class ContextAwareThread

呼び出し元のコンテキストで関数を実行するスレッドです。 これは threading.Thread のドロップインリプレイスメントであり、スレッド内での呼び出しが期待通りに動作することを保証します。 Weave は特定の contextvars が設定されている必要があります(call_context.py を参照)が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。このクラスは contextvar のコピーを自動化し、このスレッドを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。 このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。
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()
Source

method __init__

__init__(*args: 'Any', **kwargs: 'Any') → None

property daemon

このスレッドがデーモンスレッドであるかどうかを示すブール 値 です。 これは start() が呼び出される前に設定する必要があり、そうでない場合は RuntimeError が発生します。初期値は作成元のスレッドから継承されます。メインスレッドはデーモンスレッドではないため、メインスレッドで作成されたすべてのスレッドのデフォルトは daemon = False になります。 デーモンスレッドのみが残った時点で、Python プログラム全体が終了します。

property ident

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

property name

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

property native_id

このスレッドのネイティブな整数スレッド ID、または開始されていない場合は None です。 これは非負の整数です。 get_native_id() 関数を参照してください。これはカーネルによって報告されるスレッド ID を表します。
Source

method run

run() → None

Source

class ContextAwareThreadPoolExecutor

呼び出し元のコンテキストで関数を実行する ThreadPoolExecutor です。 これは concurrent.futures.ThreadPoolExecutor のドロップインリプレイスメントであり、エグゼキューター内での Weave の呼び出しが期待通りに動作することを保証します。 Weave は特定の contextvars が設定されている必要があります(call_context.py を参照)が、新しいスレッドは親からコンテキストを自動的にコピーしないため、コールコンテキストが失われる可能性があります。このクラスは contextvar のコピーを自動化し、このエグゼキューターを使用することで ユーザー が期待する通りに「ただ動作する」ようにします。 このクラスを使わずに、代わりに以下のように記述することでも同様の効果を得ることができます。
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)
Source

method __init__

__init__(*args: 'Any', **kwargs: 'Any') → None

Source

method map

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

Source

method submit

submit(fn: 'Callable', *args: 'Any', **kwargs: 'Any') → Any

Source

function deprecated

deprecated(new_name: 'str') → Callable[[Callable[, Any]], Callable[, Any]]
関数を非推奨としてマークし、ユーザーを new_name にリダイレクトするためのデコレータです。
Source

function is_colab

is_colab()

Source

function is_notebook

is_notebook() → bool

Source

function log_once

log_once(log_method: 'Callable[[str], None]', message: 'str') → None
メッセージを一度だけ ログ に記録し、同じタイプの後続のメッセージを抑制します。これは、ログ を大量に発生させることなく、エラーについて ユーザー に通知するのに便利です。 これは主に、同じエラーメッセージが何度も発生する可能性がある場合に役立ちます。例えば、op の保存に失敗した場合、その op が呼び出されるたびに発生する可能性が高いです。また、パッチを適用したイテレータにエラーがある場合、 結果 を反復処理するたびに発生する可能性があります。これにより、ログ を詰まらせることなく、エラーについて ユーザー に 情報 を提供できます。 引数:
  • log_method: メッセージの ログ 記録に使用する メソッド。これは文字列の 引数 を受け取る必要があります。
  • message: ログ 記録するメッセージ。 例:
log_once(logger.error, "Failed to save op")