PHP multithreading

poruka: 7
|
čitano: 1.475
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
PHP multithreading

 

Pozdrav, evo mučim se već dugo s ovim...

 

Ovo je skripta za PHP multithread:

 

// create the multi curl handle

$mh = curl_multi_init();

$handles = array();

 

for($i=0;$i<5;$i++)

{

// create a new single curl handle

$ch = curl_init();

 

// setting several options like url, timeout, returntransfer

// simulate multithreading by calling the wait.php script and sleeping for $rand seconds

curl_setopt($ch, CURLOPT_URL, "http://put your url here/wait.php?seconds=".($i+1));

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

 

// add this handle to the multi handle

curl_multi_add_handle($mh,$ch);

 

// put the handles in an array to loop this later on

$handles[] = $ch;

}

 

// execute the multi handle

$running=null;

do

{

curl_multi_exec($mh,$running);

// added a usleep for 0.25 seconds to reduce load

usleep (250000);

} while ($running > 0);

 

// get the content of the urls (if there is any)

for($i=0;$i<count($handles);$i++)

{

// get the content of the handle

$output.= curl_multi_getcontent($handles[$i]);

 

// remove the handle from the multi handle

curl_multi_remove_handle($mh,$handles[$i]);

}

 

// echo the output to the screen

echo $output;

 

// close the multi curl handle to free system resources

curl_multi_close($mh);

 

 

 

Sad, zanima me kako da tu ubacim, tj. s njom pozovem, više funkcija (a ne hyperlinkova) odjednom?

(npr. ove dvije funkcije:

 

function funkcija1($tablica)

{

nekanaredba

}

 

function funkcija2($tablica)

{

nekanaredba

}

 

Poruka je uređivana zadnji put sri 17.11.2010 20:23 (Tetrapak).
 
0 0 hvala 0
16 godina
neaktivan
offline
PHP multithreading

Isprika na duplom postu..

Poruka je uređivana zadnji put sri 17.11.2010 20:49 (Tetrapak).
 
0 0 hvala 0
16 godina
neaktivan
offline
PHP multithreading

Nije valjda da nitko nezna?

 
0 0 hvala 0
16 godina
neaktivan
offline
RE: PHP multithreading

http://www.ibuildings.co.uk/blog/archives/811-Multithreading-in-PHP-with-CURL.html

 

Cini mi se da si od tud pokupio kod. Ukratko, PHP inace ne podržava multithreading, nego se ovdje koristi CURL library koji sluzi:

" to retrieve content from other websites or (RESTful) webservices."

 

Ali:

"Besides using curl for getting the content of other websites, it is also possible to use curl for multithreading in PHP. PHP has no native support for multithreading like Java", "Besides the basic functions described above Curl offers the "multi" functions for retrieving content from several url's at the same time". 

 

Dakle, CURL sluzi za dobavljanje sadrzaja sa drugih lokacija, a ne izvršavanje funkcija -> ne moze se napraviti ono sto si si ti zamislio (ako sam dobro skuzio sto je to). ALI, postoji rjesenje. Napravis jednu skriptu u koju ces staviti sve funkcije koje ti trebaju i sa jednom varijablom koju ces dobiti iz $_GET-a (dakle, URL-a) odrediti koju funkciju hoces da se izvrsi.

 

Primjer:

file: functions.php

------------------------------------------------------------------------------------------

 

$funkcija = $_GET['function'];

$table = $_GET['table'];

 

$funkcija($table); // ovo je poziv funkcije, naravno, ovo je veliki security rizik jer

                // tako netko moze pozvat bilo koju funckiju u php-u, pa je dobro

                // funkcijama dat neki prefix npr function blabla_funkcija1()

 

function funckcija1($table)

{

// ....

}

 

--------------------------------------------------------------------------------------------asd

 

i onda ovdje:

curl_setopt($ch, CURLOPT_URL, "http://put your url here/wait.php?seconds=".($i+1));

 

umjesto "http://put your url here/wait.php?seconds=".($i+1)) staviš "http://put your url here/functions.php?function=funkcija1&table=news" ovako:

curl_setopt($ch, CURLOPT_URL, "http://put your url here/functions.php?function=funkcija1&table=news" );

 

i tako za svaku funckiju koju zelis da se izvrsi.

16 godina
neaktivan
offline
PHP multithreading

Hvala puno....ali nisam baš siguran da sam razumio..

Da tu sam našao kod, znam da php nema multithread nego se simulira pomoću cUrl-a.

Što se sigurnosti tiče, nije bitno jer ionako samo ja koristim tu php skriptu koja mi služi za parsiranje oko 60ak stranica. Ovo sam tražio jer u skripti imam 38 funkcija za parsiranje, a one se izvršavaju po redu, jedna iza druge, i treba joj oko 4 min da se izvrši, pa sam mislio to ubrzati na ovaj način tako da se sve funkcije krenu izvršavati istodobno tako da sve završi za 15-ak sekundi.

 

 

Dakle, imam tu skriptu (zove se: abc.php) koja sadrži tih 38 funkcija. To izgleda ovako:

 

$tablica = nekilink

 

 

function stat1($tablica)

{

//ovdje idu određene naredbe koje služe za parsiranje podataka iz $tablica

}

 

function stat2($tablica)

{

//parsiranje2

}

 

...........

 

function stat38($tablica)

{

//parsiranje38

}

 

 

 

Što bi trebalo sad dalje?

Da li se u abc.php treba sad ubaciti ovaj kod za multithreading ili se za njega radi nova skripta.

 

 

br0wn kaže:

 

"i tako za svaku funkciju koju želiš da se izvrši."

 

Želim da se izvrši svih 38 funkcija.

 

Poruka je uređivana zadnji put pet 19.11.2010 17:47 (Tetrapak).
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: PHP multithreading

Ok, imas jedan fajl u kojem ti se nalazi kod za pokretanje curl-a, nazovimo ga init.php, i imas drugi fajl koji sam naveou u prethodnom postu, funkcije.php

 

Onda u onoj for petlji u init.php napises ovako:

 

 

for($i=0;$i<38;$i++)

{

// create a new single curl handle

$ch = curl_init();

 

// setting several options like url, timeout, returntransfer

// simulate multithreading by calling the wait.php script and sleeping for $rand seconds

curl_setopt($ch, CURLOPT_URL, "http://put your url here/funkcije.php?function=funkcija".($i+1)."&table=".$tables[i] ); 

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

 

// add this handle to the multi handle

curl_multi_add_handle($mh,$ch);

 

// put the handles in an array to loop this later on

$handles[] = $ch;

}

 

 

Jos si u init.php negdje prije inicijalizacije curla u polje $tables upisi nazive tablica za sve funkcije koje zelis koristit tako da ti je kljuc polja +1 broj funkcije a vrijednost polja tablica npr:

$tables = array( "news", "posts" );

 

To znaci da ce za funkciju 1 tablica biti news, za funkciju 2 posts itd.

 

Nadam se da si sad skuzio :)

16 godina
neaktivan
offline
PHP multithreading

Pokušao sam nešto ali jedino što sam uspio bilo je blokirati komp na 15 min {#}

Sory, ali tek sad ništa ne kužim...ništa mi više nije jasno {#}

Stvarno mi je žao, nadam se da ćeš imati malo strpljenja..

Evo poslat ću ti skriptu na PM nisam siguran da smo se razumjeli.

 

PS. evo još nešto slično (ako pomaže).. 

Poruka je uređivana zadnji put sub 20.11.2010 1:30 (Tetrapak).
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice