I've followed a simple example https://docs.python.org/3/library/asyncio-task.html#running-tasks-concurrently in trying to learn the basics of asyncio.
It works as expected with most commands however when employed with three ffmpeg commands that take an input and write an output, see the example below, the terminal window prompt becomes invisible after the script has (seemingly successfully run). It responds to typed commands and shows the result but the input isn't shown until I start a new terminal session. It's the same with Code's bash terminal as with Kitty.
It doesn't seem to be a "write to file system concurrantly" problem as the echo lines don't produce the problem. The ffprobe commands don't produce it either but "command1" and 2 and 3 always do. It's the same with other ffmpeg commands that write to the file system via a conversion or a split of an audio input file.
The processes exit with 0 and ffmpeg issues most output to stderr so the output looks like
['ffmpeg -y -i "01 Dia Artio.m4a" "oof1.wav"' exited with 0] [stderr] ffmpeg version N-104926-gc8b5f2848d Copyright (c) 2000-2021 the FFmpeg developers built with gcc 11 (GCC)...
import asyncio
async def run(cmd):
proc = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE)
stdout, stderr = await proc.communicate()
print(f'[{cmd!r} exited with {proc.returncode}]')
print(f'[stderr]\n{stderr.decode()}')
async def main():
# Schedule three calls *concurrently*:
command1 = "ffmpeg -y -i '01 Dia Artio.m4a' 'oof1.wav'"
command2 = "ffmpeg -y -i '03 Cleansing.m4a' 'oof3.wav'"
command3 = "ffmpeg -y -i 'The Cranberries - 10 - Dreaming My Dreams.flac' 'oof2.wav'"
cat1 = "echo 'cat' > cat.txt"
cat2 = "echo 'kitteh' > kat.txt"
cat3 = "echo 'eirlyss' > eirlyss.txt"
ffprobe1 = "ffprobe oof1.wav"
ffprobe2 = "ffprobe oof2.wav"
ffprobe3 = "ffprobe oof1.wav"
await asyncio.gather(
run(command1),
run(command2),
run(command3)
)
asyncio.run(main())
This problem has only happened with this combination of asyncio and ffmpeg and it appears consistent and I would very much like to know what might be the cause of it.
I'm on Fedora 35 with Python 3.10.4 and a self built (via ffmpegs instructs) ffmpeg from a few months back).