Хочу найти пример PHP/pthreads бруфторсера

Discussion in 'PHP' started by blackbox, 24 Mar 2015.

  1. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Есть ли такое добро? Хочется посмотреть как там все реализовано. То есть интересует как вообще правильно многопоточные приложения реализовывать. Вот я нашел пример и немного его переделал.


    Code:
    <?php
     
    /**
    * Author: Abu Ashraf Masnun
    * URL: http://masnun.me
    */
     
    class WorkerThreads extends Thread
    {
        private $workerId;
     
        public function __construct($string)
        {
            $this->date_string = $string;
        }
     
        public function run()
        {
            //sleep(rand(0, 3));
            echo "{$this->date_string}" . PHP_EOL;
        }
    }
    
    $data = file('dates.txt'); 
    $data_size = count($data);
    // Worker pool
    $workers = [];
    $t_count = 50;
    $flag = 1;
    $k = 0;
    //echo "$data_size";
    
    while($flag === 1)
    {	
    	
    	
    	/*
    	//echo "$k\n";
    	if($k >= $data_size)
    	{	
    		//echo "111"; exit();
    		$flag = 0;
    		break 2;
    	}
    	*/
    	$c_w = count($workers);
    
    	if($c_w < $t_count)
    	{
    		for($i = $c_w; $i<$t_count - $c_w;$i++)
    		{
    			if($k >= $data_size)
    			{
    				$flag = 0;
    				break;
    			}	
    			
    			$workers[$i] = new WorkerThreads($data[$k]);
    			//echo $data[$k]."\n";
    			$workers[$i]->start();
    			$k++;	
    		}
    	
    	}
    
    	$c_w = count($workers);
    	for($i=0;$i<$c_w;$i++)
    	{
    		if($workers[$i]->join())
    		{
    			//echo "joining $i\n";
    			unset($workers[$i]);
    			
    		}
    	}
    	
    
    }
    
    ?>
    Он вроде бы работает, но я не уверен, правильно ли и по канонам все сделано. Офсайт рнр примерами, по-моему, по этой теме не блещет.
     
    #1 blackbox, 24 Mar 2015
    Last edited: 24 Mar 2015
  2. Alexander89

    Alexander89 Member

    Joined:
    30 Nov 2009
    Messages:
    30
    Likes Received:
    8
    Reputations:
    0
    #2 Alexander89, 10 Apr 2015
    Last edited: 13 Apr 2015
  3. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Ну как нет? Есть http://php.net/manual/ru/book.pthreads.php . Да, спасибо, на гитхабе примеры посмотрел, но все равно не могу решить проблему - у меня скрипт запускает несколько тредов phantomjs, и если фантом не делает никакого вывода в stdout, то kill() не убивает процесс и unset не удаляет объект. Херня какая-то.