pytilpack.threadinga¶
pytilpack.threadinga
¶
スレッド関連のasync版。
parallel()は、各コルーチンを個別のOSスレッドでasyncio.run()することで並列実行する。
同一イベントループ上でのasyncio.gather()と異なり、スレッドごとに独立したイベントループを持つ設計のため、
同期DBドライバーや非再入可能なリソース(SQLiteのコネクションなど)を複数コルーチンから安全に並列利用できる。
具体的な実装はasyncio.to_thread()で_thread()関数(スレッド上でasyncio.run(coroutine)を呼ぶ)を起動し、
threading.Semaphoreで同時実行スレッド数を制御する二重構造になっている。
parallel(funcs, max_workers=None, timeout=None)
async
¶
複数の関数を並列実行する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
funcs
|
list[Callable[[], Coroutine[Any, Any, T]]]
|
実行する関数のリスト。 |
必須 |
max_workers
|
int | None
|
同時実行するスレッド数。Noneの場合はCPUのコア数。 |
None
|
timeout
|
float | None
|
タイムアウト時間。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
list[T]
|
各関数の戻り値のリスト。 |
ソースコード位置: pytilpack/threadinga.py
parallel_for(func, n)
async
¶
複数の関数を並列実行する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
func
|
Callable[[int], Awaitable[T]]
|
実行する関数。 |
必須 |
n
|
int
|
ループ回数。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[T]
|
各関数の戻り値のリスト。 |
ソースコード位置: pytilpack/threadinga.py
parallel_foreach(func, items)
async
¶
複数の関数を並列実行する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
func
|
Callable[[U], Awaitable[T]]
|
実行する関数。 |
必須 |
items
|
Iterable[U]
|
引数のリスト。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[T]
|
各関数の戻り値のリスト。 |