Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

PHP thread

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

PHP thread

Post 16.08.2017, 09:29:22

Witam
Mam taki kod
Kod: Zaznacz cały
<?php
ini_set('memory_limit', '2512M');//to tez nie pomoglo
set_time_limit(0);
//ini_set('display_errors', 0);
class CheckIpThread extends Thread {
    private $ip;
    public $data = null;
    public function __construct ($ip_to_check) {
       $this->ip = $ip_to_check;
      
    }

    public function run () {
       $this->data = th($this->ip);
      $this->kill;
    }
}

for($a=0;$a<=2000;$a=$a+100)
{$zm[]=th_($a);
echo_($zm);
unset($zm);
}

function th_($co)
{$threads = [];
   for($a=0;$a<=100;$a++)
   {//echo_($a);
    $thread = new CheckIpThread($co+$a);
    $threads []= $thread;
    $thread->start();   
}
foreach ($threads as $thread) {
    $thread->join();
}
$zm=[];
foreach ($threads as $thread) {
    $zm[]=($thread->data);
}
unset($thread);
return $zm;
}


function th($wsad)
{return $wsad;//
}

function echo_($tekst,$def=0)
{
       ob_flush();
       flush();
        //usleep(200);
   if($def===0)
      {var_dump($tekst);}
   if($def===1)
      {echo($tekst);}
      echo"</br>";

ob_end_flush();
ob_clean();      
}
?>


Kod działa ale się zatrzymuje na 331 pozycji czasami na 659, nic z tego nie rozumiem.
sasiadstar
Posty: 123
Dołączył(a): 26.08.2016

Re: PHP thread

Post 17.08.2017, 12:20:34

Sprawdzilem przez CLI i na Edgu, skrypt działa a pod CHrome nie chce.
sasiadstar
Posty: 123
Dołączył(a): 26.08.2016

Re: PHP thread

Post 17.08.2017, 12:44:42

Aktualizacja
Zwiększyłem wartość do wyliczenia i wywaliło błąd a po powrocie do 2000 jest to samo.
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'pthreads has detected that the CheckIpThread could not be started, the system lacks the necessary resources or the system-imposed limit would be exceeded' in C:\xampp\htdocs\test\Benchmark.php:34
Stack trace:
#0 C:\xampp\htdocs\test\Benchmark.php(34): Thread->start()
#1 C:\xampp\htdocs\test\Benchmark.php(22): th_(900)
#2 {main}
thrown in C:\xampp\htdocs\test\Benchmark.php on line 34
sasiadstar
Posty: 123
Dołączył(a): 26.08.2016

Re: PHP thread

Post 17.08.2017, 19:13:27

Odnoszę spowrotem do jednego mojego postu php-i-bazy-danych/php-multitasking-t255076.html#p996138 ponieważ komunukat błędu może wskazywać na przekroczenie limitów, na co jeszcze bardziej wskazuje magiczna liczba 2000, którą podałeś https://blogs.msdn.microsoft.com/oldnew ... 4/?p=34773
Avatar użytkownikakuku
Rafał Kukawski

+∞
+∞

Posty: 19642
Dołączył(a): 14.04.2002

Re: PHP thread

Post 17.08.2017, 19:58:48

Rozumiem że każda instancji klasy to defektów proces ale jak takie coś ubić żeby można było w nieskończoność tworzyć procesy i je zamykać. Początkowo myślałem że jak ten twór skończy swoje zadanie to zostanie usunięty dlatego zrobiłem liczenie po 100 wątków ale widzę że to kompletnie nie działa. Wiem że są jakieś workery w tej bibliotece ale w polskim necie nic konkretnego nie znalazłem jak to stosować a angielska dokumentacja wogole nic mi nie mówi bo kompletnie nie czaje o co w tym chodzi a już po angielsku tym bardziej mimo że w miarę się nim posługuje i często korzystam z zagranicznej lektury. Niewiem jak ja się mam zabrać do tego tematu wielu wątków żeby porostu przetwarzać np po 100 czy 200 naraz w nieskończoność
sasiadstar
Posty: 123
Dołączył(a): 26.08.2016

Re: PHP thread

Post 18.08.2017, 11:48:25

Znalazlem takie coś ale kompletnie nie wiem o co w tym chodzi.
Kod: Zaznacz cały
<?php
ini_set('display_errors', 0);
set_time_limit(0);
ini_set('default_socket_timeout', 3);
class MyWork extends Threaded {

    public $name;

    public function __construct($name) {
   
        $this->name = $name;
    }

    public function run() {       
            echo_( $this->name );       
       
    }

}

class MyWorker extends Worker {
    public function run() {}
}

$pool = new Pool(50, \MyWorker::class);
for($a=0;$a<=10000;$a++)
{$pool->submit(new MyWork($a));}

$pool->shutdown();

function echo_($tekst,$def=0)
{
       ob_flush();
       flush();
        //usleep(200);
   if($def===0)
      {var_dump($tekst);}
   if($def===1)
      {echo($tekst);}
      echo"</br>";

ob_end_flush();
ob_clean();      
}
?>
sasiadstar
Posty: 123
Dołączył(a): 26.08.2016

Re: PHP thread

Post 19.08.2017, 12:47:42

Temat rozwiazany https://github.com/krakjoe/pthreads/issues/356
A wystarczyło dodać
for($a=0;$a<=2000;$a=$a+100)
{$zm[]=th_($a);
echo_($zm);
unset($zm);
sleep(1);
}
Pod Windowsem trzeba czasu na zwolnienie zasobów
sasiadstar
Posty: 123
Dołączył(a): 26.08.2016


Powrót do PHP i bazy danych


Kto przegląda forum

Użytkownicy przeglądający ten dział: Bing [Bot], Google [Bot] i 15 gości

Hosting, Domeny, SSL

Subskrypcja

Mamy 50681 zarejestrowanych użytkowników.
Najnowszy użytkownik: Calculatic


Nasi użytkownicy napisali:

  • 936067 wiadomości
  • w 246714 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)