Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]tworzenie watkow
Forum PHP.pl > Forum > Przedszkole
gox
Na poczatku zaznaczam ze odpalam skrypt z CLI

Czy jest jakas mozliwosc ominiecia czekania skryptu na zakonczenie procesu uruchamianego z shell_exec() / exec() itp ? narazie jedynym sposobem na to wydaje sie uruchamianie skryptu(ow) na hosingu.. wtedy moge wywolac URL ze skryptem, a fsockopen wcale nie bedzie czekal az ow skrypt sie skonczy i wywali cos na wyjscie... (tak jak to robi fopen())

z gory thnx za pomoc.
batman
PHP nie oferuje wielowątkowości. Kiedyś wrzucałem linka do ominięcia tego problemu, ale nie mogę go znaleźć. Polegało to na tym, że skrypt wywoływał inne skrypty przy pomocy curl-a.


edit
Znalazłem - wielowątkowość w PHP. Nie sprawdzałem czy działa.
l0ud
Zerknij tutaj:
http://forum.php.pl/index.php?showtopic=88290
gox
ok fajnie fajnie

male zastrzezonka:
php oferuje pelna watkowosc smile.gif z liba ;p

nie qmam z tym przekierowaniem gdzies,

odpalam pod windowsem
gox
Oh, magiczne proc_open(), czulem ze ta funkcja potrafi wiecej smile.gif
batman
Cytat
php oferuje pelna watkowosc
Niby jak? Jeśli już, to jest to jakaś okrętka, która umożliwia symulowanie wielowątkowości.
gox
Niezdety... postepuje tak jak tutaj przykazano:

http://forum.php.pl/index.php?showtopic=88290 >> http://blog.lipek.net/index.php/2008/02/26...-procesu-w-tle/

i nie daje to efektu.. skrypt nadal czeka na zakonczenie procesow....
moze nie wykorzystuje w pelni mozliwosci tych funkcji proc_open().. heh w sumie to ze nie wykorzystuje nie ulega watpliwosci.. pytanie tylko czy Da sie nie czekac na zakonczenie takiego procesu.... mi to sie nie udaje...

kodzik:

  1. <?php
  2.    function getmicrotime(){
  3.        list($usec, $sec) = explode(' ',microtime());
  4.        return ((float)$usec + (float)$sec);
  5.    }
  6.    
  7.    $time_start = getmicrotime();
  8.    
  9.    proc_close(proc_open ("ping wp.pl >> log.txt", array(), $pipes));
  10.    proc_close(proc_open ("ping wp.pl >> log.txt", array(), $pipes));
  11.    proc_close(proc_open ("ping wp.pl >> log.txt", array(), $pipes));
  12.    proc_close(proc_open ("ping wp.pl >> log.txt", array(), $pipes));
  13.    
  14.    
  15.       echo "\nKoniec skryptu PHP\n";
  16.    $time_end = getmicrotime();
  17.    $time = $time_end - $time_start;
  18.    echo "\n\nCzas trwania: $time sekund\n";
  19. ?>


Prosze, niech ktos pochyli sie nad tym problemem.. bedzie dla potomniastych! smile.gif
gox
Chyba mi sie udalo smile.gif


  1. <?php
  2. $a = popen('ping wp.pl && ping wp.pl && ping wp.pl && ping wp.pl', 'r');
  3.    echo 'robie cos1';
  4.    $b = popen('tracert wp.pl', 'r');
  5.    echo 'robie cos2';
  6. ?>


Moge wywolywac polecenia na powloce jedno po drugim nie czekajac za zakonczenie poprzedniego smile.gif
co prawda skrypt nie zakonczy sie dopoki jakis proces dziala ale to nic.
nalezy pamietac, ze wymagane jest przypisywanie uchwytu, jesli tego nie zrobimy, kazde kolejne popen() bedzie czekac na zakonczenie poprzedniego...

Oh Yessss!
gox
Podsumowujac, sprawdzane pod windowsem...

taki kod:

  1. <?php
  2.    $parametry = array(    'wp.pl',
  3.                        'onet.pl',
  4.                        'google.pl',
  5.                        'cos.pl',
  6.                        'lol.pl',
  7.                        'home.pl',
  8.                        'nazwa.pl',
  9.                        'php.pl',
  10.    );
  11.    srand();
  12.    $count = count($parametry);
  13.    for($i=0;$i<$count; $i++) {
  14.        $var = sha1(uniqid(rand(), true));
  15.        $$var = popen("ping $parametry[$i]", 'r');
  16.        echo "$i Proces\n";
  17.    }
  18.    exit;
  19.    
  20. ?>


Uruchomi nam pracujacych rownoczenie 8 procesow cmd.exe oraz 8 procesow ping.exe, czyli dokladnie to co chcialem osiagnac tworzac ten topic, dziekuje za uwage.
gox
Eh, a jednak nie jest tak rozowo, po jakims czasie pojawia sie zlowieszczy komunikat:

Warning: popen(xxx.exe,r): To o many open files in (..)

...
soł problem pozostaje otwarty.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.