Pythonでの非同期処理コード実装を学んでいます(沼にはまっています)。
await
やcreate_task
、asyncio.sleep()
等の挙動はひととおり検証しましたが、
以下コードの挙動がどうしても説明できません。
わからないこと
どうしてtask3
がtask4
よりも先に実行されるのか。
自分は以下の理解をしています。
main処理を呼び出し.
task3
とtask4
をクリエイト. 両方、待機状態.
await
でtask4
が実行される.
await
でtask3
が実行される.
(baz()
やbar()
内で、制御をmainに戻し他のPENDINGタスクを実行するコード(asyncio.sleep
等)も特に定義していないのに
なぜtask3
に先に制御が移っている・・・?)
python
1import asyncio 2 3async def main(): 4 print("start") 5 task3 = asyncio.create_task(foo("task3")) # task3をクリエイト. PENDING. 6 task4 = await bar() # bar()の処理を実行. task4をクリエイト. PENDING. 7 8 await task4 # task4を実行. 9 await task3 # task3を実行. 10 11 print("finish") 12 13 14async def foo(text): 15 print(text) 16 17 18async def baz(text): 19 print(text) 20 21 22async def bar(): 23 task4 = asyncio.create_task(baz("task4")) 24 print("bar") 25 return task4 26 27 28asyncio.run(main())
console
1start 2bar 3task3 4task4 5finish
注
(何が問題なのかよく分からず, 本件の本質がとらえきれてないので 質問文も曖昧になっていますが、
分かり次第、より明確に書き換える予定)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/15 11:30
2021/06/15 11:40 編集
退会済みユーザー
2021/06/15 11:45 編集
2021/06/15 12:20 編集
2021/06/15 12:11
退会済みユーザー
2021/06/15 12:20
2021/06/15 12:43
2021/06/15 13:14
2021/06/15 13:32
2021/06/15 13:50
2021/06/16 07:30
2021/06/16 12:05
2021/06/17 04:58