gafi Posted January 8, 2015 Report Posted January 8, 2015 Salutare, am nevoie de sfatului unui programator. Lucrez la un script ce parseaza mai multe linkuri pentru a extrage emailuri, in jur de 30,000 de linkuri pe zi. Problema mea este ca dureaza in jur de 1-2 secunde (uneori si mai putin, depinde cat de bine se misca proxiul) pentru fiecare link sa il incarece si sa il parseze, iar pentru a parsa toate linkurile dureaza undeva la 7-8 ore poate si mai bine. Am incercat sa rulez acelasi fisier in mai multe taburi, insa fara success, atunci cand apelezi un fisier in mai multe taburi, trebuie sa incarce in primul tab apoi trece la tabul 2. Nu este o solutie tocmai buna.Daca aveti voi solutii sau ideei, sunt bine venite. Ma gandeam sa apelez de mai multe ori fisierul cu exec.Multumesc anticipat Quote
gafi Posted January 8, 2015 Author Report Posted January 8, 2015 (edited) Cu CronJobs.Nu stiu cat este de bine. Hai sa explic altfel, la ce m-am gandit eu. Am un fisier, links.txt (30k linkuri), un fisier extract.php unde folosesc curl (cu proxies) pentru a intra pe cate un link in parte, extrag adresa de email apoi refresh la fisier pentru a extrage adresa de email din urmatorul link.M-am gandit asa, sa fac un fisier main_extract.php unde folosesc functia exec() si apelez extract.php de 10 ori, una sub alta. Asta mi-a venit intre timp in cap, insa nu o mai pun in practica pentru ca sunt prea obosit, o sa incerc maine dimineata. Alte idei mai aveti?Sunt deschis la orice idee, chiar daca trebuie sa schimb structura scriptului. Ideea este sa extrag cat mai repede emailurile din acele linkuri. Vreau o solutie pentru a incarca 40 de linkuri in acelasi timp, nu unul cate unul. Edited January 8, 2015 by gafi Quote
GarryOne Posted January 8, 2015 Report Posted January 8, 2015 Sunt o gramada de varianta, merge si cu cronjobs si cu loop-uri in bash, in batch.run multiple instance of same php script from bash - Server Faultasynchronous - What is the best way to run a PHP script multiple times asynchronously in windows? - Stack OverflowRunning multiple instances of a PHP file from bash and APPEND result to file? - Stack OverflowAr trebui sa pui un paramaetru get, sa fie ceva de genul extract.php?line=235 ca sa stie scriptul de unde sa porneasca, iar intr-un fisier text iti poti salva liniile unde ai ramas sau ce te intereseaza pe tine. Deci ai putea ca prima instanta sa se executa de la linia 1-1000, a doua instanta de la 1000-2000 si tot asa. Quote
JIHAD Posted January 8, 2015 Report Posted January 8, 2015 (edited) poate multi-thread?cateva discutii pe tema asta:multithreading - How can one use multi threading in PHP applications - Stack Overflow Edited January 8, 2015 by JIHAD Quote
eusimplu Posted January 8, 2015 Report Posted January 8, 2015 <?php// 200 threadsforeach(array_chunk($links, count($links)/200) as $threadChunk){ if(!pcntl_fork()){ // aici parsezi $threadChunk si le verifici exit; }}while (pcntl_waitpid(0, $status) != -1) { $status = pcntl_wexitstatus($status);} 1 Quote
Elohim Posted January 9, 2015 Report Posted January 9, 2015 https://rstforums.com/forum/81756-rst-email-crawler-v1-0-a.rst Quote
gafi Posted January 9, 2015 Author Report Posted January 9, 2015 Multumesc pentru raspunsuri baieti, am incercat variantele voastre insa am gasit una care se potriveste la fix:curl_multi_initSe poate inchide threadul Quote
funboy20_03 Posted January 13, 2015 Report Posted January 13, 2015 probabil e tarziu dar un script de bash care sa iti porneasca curl-ul in screen cred c ar fi cea mai simpla solutie Quote
gafi Posted January 13, 2015 Author Report Posted January 13, 2015 probabil e tarziu dar un script de bash care sa iti porneasca curl-ul in screen cred c ar fi cea mai simpla solutieDa, este o solutie pentru a rula un script php de mai multe ori, dar pentru a prelua contentul din mai multe linkuri, curl_multi_init este solutia ideala. Eu am pus-o deja in practica si scanez cate 100 de linkuri fara probleme, in cateva secunde. Quote