Я новичок в Phalcon и Pthreads.
Моя среда выглядит следующим образом:
$ php -v
PHP 7.2.2 (cli) (сборка: 19 февраля 2018 г. 10:04:19) (ZTS DEBUG)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
с Zend OPcache v7.2.2, Copyright (c) 1999-2018, Zend Technologies
$ php -m | grep pthreads
Pthreads
phpinfo () говорит следующее:
Версия PHP 7.0.25-0ubuntu0.16.04.1
Безопасность потоков отключена
Несмотря на компиляцию с —enable-keeper-zts \ —with-tsrm-pthreads
Я следовал этим инструкциям:
https://blog.programster.org/ubuntu16-04-compile-php-7-2-with-pthreads
У меня есть две части кода в одной папке:
class Task extends Threaded
{
private $value;
public function __construct(int $i){
$this->value = $i;
}
public function run(){
$s=0;
$rand = rand(1, 100);
$sleep = rand(1, 500);
for ($i=0; $i<$rand; $i++){
$s++;
time_nanosleep (0, $sleep);
}
echo "Task: {$this->value}\n";
}
}
# Create a pool of $n threads
$n = 16;
$pool = new Pool($n);
for ($i = 0; $i < 1000; ++$i){
$pool->submit(new Task($i));
}
while ($pool->collect());
$pool->shutdown();
Этот код работает отлично.
Мой другой кусок кода создан из phalcon.
<?php
class MultiapiPool
{
private $providers;
private $dependencies;
private $input;
public function __construct($p, $d, $i){
$this->providers = $p;
$this->dependencies = $d;
$this->input = $i;
}
private function getProviders(){
return $this->providers;
}
private function getDependencies(){
return $this->dependencies;
}
private function getInput(){
return $this->input;
}
public function run(){
$providers = $this->getProviders();
$pool = new Pool(count($providers));
return array(
'input' =>$this->getInput(),
'dependencies'=>$this->getDependencies(),
'providers'=>$providers);
}
}
Этот класс выдает ошибку:
Неустранимая ошибка PHP: необработанная ошибка: класс ‘Pool’ не найден в /var/www/html/tutorial/app/libraries/MultiapiPool.php:29
Нарушающая строка: $ pool = new Pool (count ($ provider));
Мои вопросы:
Как новый Pool () работает в одном файле, а не в другом?
Специальных включений в рабочем файле нет.
Безопасность потоков отключена
Несмотря на компиляцию с —enable-keeper-zts \ —with-tsrm-pthreads
Ваш класс, который работает, расширяет поток:
class Task extends Threaded
Ваш класс, который не работает, не расширяет поток:
class MultiapiPool
Попробуйте расширить MultiapiPool для использования Threaded и посмотреть, исправит ли это что-то:
class MultiapiPool extends Threaded
Других решений пока нет …