Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Miten toistan samaa koodia jatkuvasti resetoiden välillä

E1ss [31.03.2019 11:58:39]

#

Minulla on AWS serverillä (EC2 ubuntu 18) pyörimässä python koodi jatkuvasti. Ongelma on että noin 20-50 kierroksen jälkeen koodi jäätyy. Ongelma johtuu varmaan siitä että käynnistän koodin kerran ja koodin sisällä toistan sitä for loopilla siten ettei koskaan lopu. Ajattelin että ehkä sinne jää jotain arvoja muistiin jotka sitten kasaantuvat ja lopulta jumittavat ohjelman. Mietein siis että onko jotain tapaa jolla saisin terminalin suorittamaan koodin aina kun edellinen loppuu jolloin tulos olisi sama kuin että pyörittäisi yhden kierroksen ja käynnistäisi aina uudelleen. Toinen ajatus oli että saanko jotenkin "resetoitua" kaiken. Kerääkö roskienkerääjä kaikki vai onko viellä tehokkaampia keinoja. Eli riittääkö gc.collect() vai onko parempia?

Jaska [31.03.2019 12:50:46]

#

Varmaan ensisijaisesti kannattaa korjata se Python-koodi. While-luuppi soveltuu paremmin ikuiseen silmukkaan kuin for. Kannattaa debugata, mikä aiheuttaa jäätymisen. Jos nyt kuitenkin haluat toistaa skriptiä Bashissä, niin ohjeita on sivulla https://superuser.com/questions/361902/continuously-re-execute-a-command-when-it-finishes-in-bash

Metabolix [31.03.2019 18:40:56]

#

Sinänsä voit komentorivillä ajaa koodia toistuvasti vaikka näin:

while sleep 1; do python koodi.py; done

Silmukan saa loppumaan painamalla pari kertaa control-C.

Mutta kuten Jaska sanoi, viisainta on korjata se koodi. Jos suljet komentorivillä käynnistetyn Python-ohjelman control-C:llä, näet komentorivillä myös, mihin kohtaan ohjelma jäi (ellei try-lohko sekoita tätä tutkimista).

Roskienkeruu kyllä toimii automaattisesti, eli gc.collect() ei tuo mitään lisäarvoa. Tietenkään Python ei pysty keräämään sellaista dataa, joka on vielä käytössä. Eli jos vaikka lisäät johonkin list- tai dict-rakenteeseen aina vain uusia arvoja, vanhat eivät tietenkään poistu automaattisesti, koska Python ei voi tietää, mitkä niistä ovat turhia.

E1ss [01.04.2019 10:24:01]

#

Kiitos avusta. Voi olla että välillä tulee vain liian iso matriisi lasku jolloin ongelma ei sinällään ole koodissa niin yritän tätä while slee... loopia niin ainakin sitten pitäisi nähdä pysähtyykö se taas.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta