Python と Bash の小ノート
Python の非同期プログラミングの続き。きのう書いたような関数はブロック関数であるという。 複数のブロック関数を非同期的に呼び出す方法を探したら、そのものずばりがあった:
-
python - How to use asyncio with existing blocking library? - Stack Overflow
投稿にあるコードを簡素化して実行したところ理想的な挙動を示した。さっそく自作スクリプトに取り込もう。 このあとは Semaphore を Thread に置き換えて、
YouTube()のブロッキングダウンロードにasyncio.sleep()で重み付けする。pytube自身が死んでいる件は後で考える。 -
bash - Calling shell functions with xargs - Stack Overflow
長年困っていた問題が解消された。たとえばクリップボードに YouTube の URL を行方向に並べたテキストがあるとする。 それを複数個の URL をコマンドライン引数に取る自作シェル関数の
download_mp4に渡すという場合はこう入力できる:bash$ export -f download_mp4 bash$ getclip | xargs -I {} bash -c "download_mp4 {}"