Kuidas laadida oma bashi töövooge paralleelselt GNU-ga

GNU parallelon käsurea tööriist paralleelsete tööde käivitamiseks.

parallelon vinge ja kuulub iga programmeerija tööriistakasti. Kuid algul leidsin, et dokumendid on natuke valdavad. Õnneks võite olla kasulik parallelvaid mõne põhikäsuga.

Miks see parallelnii kasulik on?

Võrdleme sama arvutimahuka ülesande järjestikust ja paralleelset täitmist.

Kujutage ette, et teil on .flav-helifailide kaust, mille saate teisendada .flac-failiks:

Need on päris suured failid, igaüks neist on vähemalt gigabait.

Failide teisendamiseks kasutame veel ühte suurepärast käsurea tööriista ffmpeg. Siin on, mida peame iga faili jaoks käivitama.

ffmpeg -i audio1.wav audio1.flac

Kirjutame skripti, et neid järjestikku teisendada:

# convert.sh ffmpeg -i audio1.wav audio1.flac ffmpeg -i audio2.wav audio2.flac ffmpeg -i audio3.wav audio3.flac ffmpeg -i audio4.wav audio4.flac ffmpeg -i audio5.wav audio5.flac

timeTerminalist skripti helistades saame töö teostamise ajastada ette valmistades. timeprindib täitmise ajal kulunud reaalse aja.

time ./convert.sh

Meie stsenaarium valmib veidi üle minuti.

Pole paha. Kuid nüüd laseme paralleelselt!

Me ei pea oma skripti osas midagi muutma. Lipuga -asaame oma skripti otse sisse tõmmata parallel. parallelkäivitab iga rea ​​eraldi käsuna.

parallel -a ./convert.sh

Kasutades parallelmeie muundamise jooksis veidi üle poole ajast. Tore!

Ainult viie faili korral pole see erinevus nii suur probleem. Kuid suuremate loendite ja pikemate ülesannete korral saame sellega palju aega kokku hoida parallel.

Ma puutusin kokku parallelandmetöötlusülesandega töötades, mis oleks järjestikku tehes tõenäoliselt töötanud tund või kauem. Koos parallelsellega kulus vaid mõni minut.

parallelvõimsus sõltub ka arvutist. Minu MacBook Pro Intel i7-l on ainult 4 südamikku. Isegi see väike ülesanne ajas nad kõik oma piirini:

Võimsamatel arvutitel võivad olla 8, 16 või isegi 32 südamikuga protsessorid, mis pakuvad teie töö paralleelimise kaudu tohutut aja kokkuhoidu.

Kasulik olla koos parallel

Teine suur eelis parallelon selle lühidus ja lihtsus. Alustame vastikust Pythoni skriptist ja teisendame selle puhtaks kutseks parallel.

Siin on Pythoni skript meie helifailide teisendamise teostamiseks:

import subprocess path = Path.home()/'my-data-here' for audio_file in list(path.glob('*.wav')): cmd = ['ffmpeg', '-i', str(audio_file), f'{audio_file.name.split(".")[0]}.flac'] subprocess.run(cmd, stdout=subprocess.PIPE)

Jah! See on tegelikult palju koodi, millele mõelda, et lihtsalt mõne faili teisendada. (Selleks kulub umbes 1,2 minutit).

Teisendame oma Pythoni parallel.

Skripti kutsumine kasutajaga parallel -a

parallel -a your-script-here.sh on kena üherealine, mida kasutasime ülal oma bashi skripti torustamiseks.

See on suurepärane, kuid nõuab siiski käivitatava bashi skripti välja kirjutamist. Meie näites, me ikka kirjutas iga üksiku kõne ffmpegsisse convert.sh.

Torud ja stringide interpoleerimine parallel

Õnneks parallelannab meile võimaluse convert.shtäielikult kustutada .

Siin on kõik, mida peame oma pöördumise saavutamiseks jooksma:

ls *.wav | parallel ffmpeg -i {} {.}.flac

Lammutame selle.

Saame nimekirja kõigist meie kataloogis olevatest .wav-failidest ls *.wav. Siis edastame ( |) selle loendi parallel.

Paralleel pakub kasulikke viise stringide interpoleerimiseks, nii et meie failirajad sisestatakse õigesti.

Esimene on see {}, mis parallelasendab automaatselt ühe rea meie sisendist.

Teine operaator on {.}, mis sisestab ühe rea, kuid eemaldatud faililaiendid.

Kui parallellaiendaksime käsku, mida käivitatakse meie esimese sisendrea jaoks, näeksime ...

ffmpeg -i audio1.wav audio1.flac

Args koos Parallel

Nagu hiljem selgub, pole meil lsoma ülesande täitmiseks vaja isegi torustikku minna. Saame minna ikkagi lihtsamaks:

parallel ffmpeg -i {} {.}.flac ::: *.wav

Edastatud argumendid parallelesinevad pärast käsku ja on eraldatud :::. Sel juhul on meie argument see *.wav, mis annab loendi kõigist meie kataloogis olevatest .wav-failidest. Nendest failidest saab meie kiire paralleltöö kiire sisend .

Lõbus fakt: parallelselle ehitas Ole Tange ja see ilmus 2011. Tema sõnul saate tööriista teadustööks kasutada ilma allikapaberit mainimata tagasihoidliku 10 000 euro suuruse tasu eest!

Täname lugemast!