Jak spustit soubr.py

Jann

Jak spustit soubr.py
« kdy: 15. 07. 2015, 12:30:28 »
Zdravím, když spustím soubor v Debianu s příponou "py" tak trvá cca 10 sec než se něco načte a zobrazí. Udělá to ale jen po prvním spuštění, při dalším spuštění stejného souboru se zobrazí okamžitě. Neví prosím někdo, jak tohle vyvolat i při dalším spuštění abych nemusel vždy restartovat server ? Díky moc za pomoc.


ghost

Re:Jak spustit soubr.py
« Odpověď #1 kdy: 15. 07. 2015, 12:55:59 »
Smazat soubor s priponou .pyc ?

Jann

Re:Jak spustit soubr.py
« Odpověď #2 kdy: 15. 07. 2015, 13:05:34 »
Nee, i když to smažu, načte se to ihned.

T

Re:Jak spustit soubr.py
« Odpověď #3 kdy: 15. 07. 2015, 13:05:50 »
Restartovat server kvůli tomu, aby se něco zobrazilo pomalu, nedává moc smysl, o co tedy jde? Spouštíš ho pomocí python test.py a restartuješ celý server nebo jde o webserver, který spouští ten skript?

Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Jak spustit soubr.py
« Odpověď #4 kdy: 15. 07. 2015, 13:12:05 »
Teorie mi říká, že jedeš na nějaký VPS, kde Ti běží tak moc věcí, že trvá 10 sekund, než se spustí Python (interpret) - ať už kvůli slabýmu CPU nebo nedostatku RAM (nebo v extrémním případě pomalýmu disku). Při opakovanym spuštění už to jede, protože to už jednou proběhlo a zůstalo to načtený. Zní to pravděpodobně?


poustevnik

Re:Jak spustit soubr.py
« Odpověď #5 kdy: 15. 07. 2015, 14:11:15 »
Pokud chceš, aby se ti něco spustilo po delší době, použij "sleep". buď v shell skriptu, nebo klidně na příkazové řádce

Kód: [Vybrat]
sleep 10 ; soubor.py
(na jednom řádku, odděleno středníkem)
kde 10 je počet sekund

Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:Jak spustit soubr.py
« Odpověď #6 kdy: 15. 07. 2015, 14:39:52 »
Sleep mu to ale protáhne o 10 sekund i při prvním spuštění. Nejdřív je potřeba zjistit, co způsobuje prodlevu u toho prvního spuštění (a eliminovat jí), pak lze sjednocovat.

Jann

Re:Jak spustit soubr.py
« Odpověď #7 kdy: 15. 07. 2015, 14:47:08 »
Jedná se klasicky HW, OS Debian v lokální síti. Python se spouští přímo z command line. CPU i7 + 32GB RAM +  SSD

Jann

Re:Jak spustit soubr.py
« Odpověď #8 kdy: 15. 07. 2015, 14:49:19 »
Sleep mu to ale protáhne o 10 sekund i při prvním spuštění. Nejdřív je potřeba zjistit, co způsobuje prodlevu u toho prvního spuštění (a eliminovat jí), pak lze sjednocovat.
Přesně tak, v první řadě potřebuji zjistit, co je příčinou toho dlouhého načítání, které se projevuje pouze při prvním spuštěním a pouze po restartu serveru.

gamer

Re:Jak spustit soubr.py
« Odpověď #9 kdy: 15. 07. 2015, 14:55:42 »
Přesně tak, v první řadě potřebuji zjistit, co je příčinou toho dlouhého načítání, které se projevuje pouze při prvním spuštěním a pouze po restartu serveru.

strace -tt ./soubor.py

e3k

Re:Jak spustit soubr.py
« Odpověď #10 kdy: 15. 07. 2015, 19:56:49 »
xtest: spust iny_subor.py a zisti ci tam mas 10sec pauzu.

Jann

Re:Jak spustit soubr.py
« Odpověď #11 kdy: 21. 07. 2015, 10:43:35 »
Tak jsem se hrál s tím 'strace'

strace -tt ./soubor.py

a zjistil jsem tohle

Kód: [Vybrat]
10:28:04.205286 openat(AT_FDCWD, "/root/dirs/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
10:28:04.206121 getdents(3, /* 102 entries */, 32768) = 6712
10:28:47.169402 getdents(3, /* 0 entries */, 32768) = 0
10:28:47.169733 close(3)                = 0

netuším ale co dělá příkaz 'getdents'. takový příkaz ve svém scriptu vůbec nemám ;)

Jann

Re:Jak spustit soubr.py
« Odpověď #12 kdy: 21. 07. 2015, 10:44:32 »
xtest: spust iny_subor.py a zisti ci tam mas 10sec pauzu.
Nemám, v jiném souboru se spustí py ihned

gamer

Re:Jak spustit soubr.py
« Odpověď #13 kdy: 21. 07. 2015, 11:12:05 »
Kód: [Vybrat]
10:28:04.205286 openat(AT_FDCWD, "/root/dirs/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
10:28:04.206121 getdents(3, /* 102 entries */, 32768) = 6712
10:28:47.169402 getdents(3, /* 0 entries */, 32768) = 0
10:28:47.169733 close(3)                = 0

netuším ale co dělá příkaz 'getdents'. takový příkaz ve svém scriptu vůbec nemám ;)

Čte to položky nějakého adresáře /root/dirs/ a to trvá dlouho, takže to brzdí dísk.
getdents je funkce kernelu: http://man7.org/linux/man-pages/man2/getdents.2.html
obvykle se to volá z readdir: http://man7.org/linux/man-pages/man3/readdir.3.html

i

Re:Jak spustit soubr.py
« Odpověď #14 kdy: 21. 07. 2015, 11:33:33 »
Záleží dost na tom co ten skript dělá / má dělat, Pokud třeba spouští nějakou službu, kterou si nejprve ověřuje zda už neběz, třeba navazováním TCP spojení, tak může poprvé čekat ana timeout, usoudí že neběží, tak jí spustí, podruhé pak se spojí hned a ví že službá běží tak skončí.

Jiná varianta.
může třeba počítat soubory ve filesystému, poprvé se jednotlivé adresáře čtou z disku, podruhé už z cache.

Nebo hromada dalších variant.

Bez znalosti toho co ten skript dělá nebo má dělat se tady vří z vody.
Zkus ho pro poprvá a podruhé spustit v příkazu time a alespoň uvidíš zda čeká na CPU nebo na I/O.