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 &"
- 793 megtekintés
Hozzászólások
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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. :-(
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Írtam rá egy progit java-ban. Ez közvetlenül használja a service-t. Jóval gyorsabb lett minden. :-)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Most berakok wait-eket 50 soronként.
Ami még fontos a load is felmegy a belassulásra ~1 környékére.
- A hozzászóláshoz be kell jelentkezni