Autor Zpráva
Jakub Žáček
Profil *
Dobrý den,

mám script kde se potřebuji vyhnout kolizím při více požadavcích, dalo by se nějak tomuto scriptu "vnutit" při zpracovávání předchozího požadavku počkání třeba 2s? Dalo by se to určitě při spuštění scriptu uložit do db a po dokončení opět uvolnit, ale jde mi o to jak to pozdržet po delší dobu. Nechtěl bych to dělat cykly vracejícími se samy na sebe, připadá mi to příliš náročné pro CPU. Vrátit externí aplikaci hlášku že to má zkusit později je v mém případě také neelegantní. Děkuji za případné rady.
TomášK
Profil
Existuje systémový příkaz sleep, možná jde i nějak nacpat do php. Ale dělat to tímhle způsobem mi přijde jako děsná prasárna :) Kde se potřebuješ vyhnout kolizím? Nepomohly by ti transakce v databázi?
Jan Tvrdík
Profil
V php je na to funkce sleep nebo usleep.
ninja
Profil
Kolik predpokladate uzivatelu skriptu? Protoze jestli vice jak 3 najednou, vetsinu doby bou cekat.

Misto sleep bych radeji volol stale se obnovujici stranku, pripadne lepe to delat opakovanym pokus pres ajax a uzivateli o tom dat informacu, ze se pozadavek zpracovava, respektive je zarazen do fronty...
Jakub Žáček
Profil *
Děkuji, toto mi asi vyhovuje, ale ještě bych se chtěl ujistit jestli to bude dělat přesně to co chci. Podlě mě by to mělo dělat následující:
ke scriptu se přihlásí uživatel, já zjistím že je db prázdná, proto dám zpracovat cyklus který potřebuji, ale při přihlášení druhého usera zjistím že se script právě využívá, proto dám hned na začátku scriptu sleep na dostatečnou dobu. Po provedení scriptu pro prvního uživatele zjistím že je ve frontě už další uživatel a proto dám unsleep, což by mělo povolit přístup druhého uživatele k dalšímu zpracování. Mohlo by to takto fungovat? :)) Děkuji.
Alphard
Profil
nemohlo, funkci unsleep() neznám :-) je to usleep() a na rozdíl od sleep() bere parametr v mikrosekundách

každá z těchto funkcí pozastaví výkon scriptu na pevný, předem daný časový úsek
Jakub Žáček
Profil *
Dobře, takže to mohu použít bez problému tak jak potřebuji, jen musím dobře odhadnout dobu zpracování scriptu pro prvního usera aby to nebylo moc málo ani moc dlouho, ale jinak dosáhnu požadovaného efektu? :)
Alphard
Profil
a ještě kontrola, jestli mezi tím nepřišel někdo třetí

ale bylo by lepší, kdybyste napsal, co vlastně chcete, databáze obsahují např. zamykání tabulek apod., třeba by to šlo řešit lépe
ninja
Profil
Jakub Žáček: dulezite je jak dlouho musi skript cekat, tedy jak dlouho zhruba predpokladate jeho vykonavani (praci s DB). Jestli je to v radu milisekund nebo nekolika malo sekund, je sleep pouzitelny. Pri delsi casove narocnosti ale server vrati timeout a uzivatel bude mit pocit, ze stranka nefunguje. Pak je lepsi zobrazit stranku "pockejte prosim" a nastavit meta refresh na nejakou relevantni hodnotu. Nebo nejlepe ten ajax.
Jakub Žáček
Profil *
ninja: ta doba zpracování je předpokládám pro mé účely v ms...

Alphard: Pokud bych pracoval s údaji z DB, asi by to šlo řešit elegantněji, ale já zpracovávám souborová data na hostingu. Převádím, mažu, přejmenovávám soubory a podobně, a na to podle mě lepší řešení není.
Alphard
Profil
http://latrine.dgx.cz/atomicke-operace-se-soubory
Jakub Žáček
Profil *
Děkuji za link, ten jsem si prostudoval a snazší mi připadá mé primitivnější řešení, i když ne tak čisté. :)
Jan Tvrdík
Profil
Alphard:
Článek je zastaralý, aktuální verze je v dokumentaci Nette – Nette\IO\SafeStream.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: