AWS Polly CLI script miért lassul be?

 ( yoursoft | 2018. december 7., péntek - 22:41 )

Szeretnék egy kis segítséget kérni.

Sok sok soron keresztül futtatok egy nagy shell scriptet (~400 ezer soros).

Egy sor így néz ki:
mkdir -p a && aws polly synthesize-speech --output-format mp3 --voice-id Matthew --text 'slow down' a/b.mp3 &> /dev/null

Az elején nagyon gyorsan csinálja (másodpercenként többet is), majd felmegy a CPU használat magasba és már 8-10 secbe is telik egy sor lefuttatása.
Háttérbe indítom el. Azaz "./a.sh &"

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Amikor belassul hány processz fut párhuzamosan? Mivel nulla idejű futás nincs és minden sor egy új processz, ennyi sor esetén vsz nagyon feltornyosul. Ráadásul öngerjesztő, minél lassabban végez egy, annál több új indul az alatt az idő alatt.

Köszi a választ.

Csak 1 process fut egyszerre. Ha lekérem, akkor csak 1 aws polly task fut egy időben. Hiszen soronként hajtja végre a scriptet.
Az && meg azt biztosítja, hogy az mkdir-t bevárja a következő parancs.

Valami olyasmire gyanakszom inkább, hogy valami kimenet nem lesz lezárva és azok gyűlnek fel a háttérben. De nem vagyok annyira otthon bash-ban.

Ezt most nem teljesen ertem. Irod is, hogy a hatterben inditod el ezeket, a & is ott a sor vegen. Az pont azt jelenti, hogy elindul, es utana atugrik a kovetkezo sorra, anelkul, hogy megvarna mig befejezodik. Szoval tobb process fut egyszerre, nem? Te latod a scriptedet..

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

fisher@s0:/tmp$ echo bubu &>baba
fisher@s0:/tmp$ cat baba
bubu

Persze ha nem bash az sh, akkor a fene tudja. De azt írja, hogy a script végén van a & és hogy csak egy polly fut.

Jogos.. ott csak atiranyitas, a vegen background..

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Van egy nagy script fájlom, aminek 1 sora egy hangfájl generálása.
Ezt a script fájlt indítom el háttérben, hogy ne kelljen nyitva tartanom egy parancssort.
A script fájlban van ~400 ezer sor. Ezek egymás után hajtódnak végre.

Amit megfigyeltem, az, hogy kb. 50 hívás után belassul a lekérés és úgy nézem fixen 10 sec-et fut egy aws lekérés.
Tehát szerintem ez egy limit az aws-ben.

A wait nem jött be.
A sleep rövidebb mint 10 sec sem jött be.
Megfogadtam a tanácsod és most több szálon futtatom. De így sem sokkal jobb a helyzet. 10 sec alatt kb. 1.5 mp3 készül el.

Így sajnos a 400 ezer sor elég sokáig fog tartani. :-(

Most megnézve a futást úgy 4 órára. Azt látom, hogy ~20-25 sec egy mp3 elkészítése.
Így még lassabb mint gondoltam. :-(
Megnézem ha valami script nyelvben sikerül írnom rá valamit, akkor lehet, hogy nincs rajta az indítási overhead.

Írtam rá egy progit java-ban. Ez közvetlenül használja a service-t. Jóval gyorsabb lett minden. :-)

Szóval a java gyorsabb mint a shell script :D

Nyilván inkább arról van szó, hogy valamelyik limitet elérted, bár olyanról még nem hallottam hogy pl. a percenként indítható processzek számát korlátoznák. Érdemes lenne átnézni az aws leírását, hogy milyen diagnosztika van, hogy lehessen látni hogy pontosan mi is száradt ki.

Nem ismerem az AWS-t ilyen szinten, de ha eleinte gyors, akkor miert nem parhuzamositod csak egy hatarig?
Pl. ott a parallel parancs. Ez 8 szalon ogg-ba konvertalja a megadott wav-okat. Amikor az egyik vegzett, indit helyette egy ujat, de nem terheli le feleslegesen a gepet azzal, hogy egymasra varnak a processek:
parallel -j 8 oggenc -- *.wav
Nem csak CPU-igenyes programoknal jo, youtube-dl-t szoktam meg igy hasznalni, amikor egyszerre sok videot mentek. Eleg hasznos.

Ja, teljesen mas programokat is el tudsz inditani vele:
parallel -j 3 -- ls df "echo hi"
vagy az uj szintaxissal:
parallel -j 3 ::: ls df "echo hi"
(az uj bonyolultabbnak nez ki, de tobbet tud)

Ha nem akarod nagyon atirni a scriptedet, akkor meg tegyel be nehany sor (es hatterbeli processinditas) utan 1-1 wait-et! Parameter nelkul bevarja az osszes addigi, hatterben futo programodat. Ez persze rosszabb megoldas, mint az elozo, de konnyebben at tudod alakitani.

szerk: ha mar felho..
Ha tobb geped van, es van ertelme a feladatod eseteben, van lehetoseg arra is, hogy szetdobalja a feladatokat tobb gepre, es utana osszeszedje az eredmenyt. Gyors video tutorial.

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Köszi. Ez a legolcsóbb kisgép amit lehet kapni az Amazonnál. 512k memória, 1 CPU.
Azért rendeltem csak kicsit, mert régebben készítettem már így hangokat és nagyobb gépnél ugyanígy belassult.
Most ránézve 1 CPU-n ugyanolyan gyorsan indult, mint régen és kb. ugyanannyi idő alatt is lassult be.

Köszi a tutorialt is. Csak 1 gépem van, de megnézem, mert amúgy is hasznos.

Előbb azt szeretném megérteni, hogy egy szálon miért lassul be.

Most berakok wait-eket 50 soronként.

Ami még fontos a load is felmegy a belassulásra ~1 környékére.