完了を待たないで実行(fire and forget)
run_in_executor()
の引数は(executor, func, *args)
になっているので、呼び出す関数を2番目の引数、呼び出す関数に渡す引数を3番目以降の可変長引数に渡します。
Python3.10以降では、asyncio.get_event_loop()
をした際に実行中のイベントループがない場合はDeprecationWarningが出るのでasyncio.new_event_loop()
を使いましょう。
import asyncio
import time
def func(sec: int):
print("start")
time.sleep(sec) # 重い処理の代わり
print("finish")
for i in range(10):
print(i)
if i == 3:
asyncio.new_event_loop().run_in_executor(None, func, 3)
time.sleep(1)
実行結果
0
1
2
3
start
4
5
finish
6
7
8
9
参考