08:14:49 @aoirint@mstdn.aoirint.com
icon

ところでcreate_subprocess_execのAPIがPopenと違うのなんとかならないですかね

08:11:31 @aoirint@mstdn.aoirint.com
icon

3秒待機→1を出力→3秒待機→2,3を出力→
3秒待機→4を出力→3秒待機→5,6を出力
が期待されるかな

08:06:28 08:10:47 @aoirint@mstdn.aoirint.com
icon

async def a(s: str):
time.sleep(3)
print(s)
async def b(s: str):
await asyncio.sleep(3)
print(s)
async def c(s: str):
cmd = ["sleep", "3"]
proc = subprocess.Popen(args=cmd)
proc.wait()
print(s)
async def d(s: str):
cmd = ["sleep", "3"]
proc = await asyncio.create_subprocess_exec(cmd[0], *cmd[1:])
await proc.wait()
print(s)
async def main():
await asyncio.gather(a("1"), b("2"), b("3"))
await asyncio.gather(c("4"), d("5"), d("6"))

asyncio.run(main())

07:56:47 @aoirint@mstdn.aoirint.com
icon

これ
> I/O(入出力)の待ち時間に別の処理をやらせることで 並行処理 をさせるための仕組み
Pythonで非同期処理をやる
zenn.dev/kevinrobot34/articles

07:56:20 @aoirint@mstdn.aoirint.com
icon

async関数の中でブロックしてしまうと、他のasync関数の実行を妨げてしまう(awaitしないと処理時間を譲れない)

07:54:14 @aoirint@mstdn.aoirint.com
icon

実行順は保証されないだろうけど、だいたいの場合
3秒待機→aを出力→3秒待機→b,cを出力
になるかな

07:53:25 @aoirint@mstdn.aoirint.com
icon

async def a(s: str):
time.sleep(3)
print(s)
async def b(s: str):
await asyncio.sleep(3)
print(s)
async def main():
await asyncio.gather(a("a"), b("b"), b("c"))

asyncio.run(main())