並行処理
Nagiの非同期処理はTokio上で動きます。HTTPやタイマーを待っている間に、ほかの処理を進められます。使い方はasyncとscopeから確認してください。
SQLiteは専用のスレッドで処理します。重いCPU処理も、非同期処理を進めるスレッドを長く占有しないよう、別の処理枠へ渡します。
async def main() -> Result[unit, Error]:
result = try await cpu_sum(100000)
print(result)
return ok(print("完了"))
cpu_sumはCPU処理を分けて実行するためのサンプルです。同時に実行するCPU処理は最大4件です。利用者が任意の関数をこの枠へ渡すAPIは未対応です。
このページの目次
データの受け渡し
複数のtaskへ、変更できる値を自動で共有することはありません。所有権を移して渡すか、sharedで読み取り用に共有します。借用したviewは別のtaskへ渡せません。
すでに始まったCPU処理は、呼び出し元をキャンセルしただけでは止まりません。長い処理には、その処理自身が停止の要求を確認する仕組みが必要です。