我是Phalcon和Pthreads的新手。
我的环境如下:
$ php -v PHP 7.2.2(cli)(内置:2018年2月19日10:04:19)(ZTS DEBUG) 版权所有(c)1997-2018 PHP小组 Zend Engine v3.2.0,版权所有(c)1998-2018 Zend Technologies Zend Technologies的Zend OPcache v7.2.2,Copyright(c)1999-2018,
$ php -m | grep pthreads 并行线程
phpinfo()说明如下:
PHP Version 7.0.25-0ubuntu0.16.04.1
线程安全已禁用
尽管汇编了--enable-maintainer-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致命错误:未捕获错误:/var/www/html/tutorial/app/libraries/MultiapiPool.php:29中找不到类'池'
违规行是:$ pool = new Pool(count($ providers));
我的问题是:
新Pool()如何在一个文件中工作但在另一个文件中不工作? 工作文件中没有特殊的包含。
线程安全已禁用
尽管汇编了--enable-maintainer-zts \ --with-tsrm-pthreads
答案 0 :(得分:0)
你的课程正在扩展Threaded:
class Task extends Threaded
你的班级不起作用并没有扩展螺纹:
class MultiapiPool
尝试扩展MultiapiPool以使用Threaded并查看是否可以解决问题:
class MultiapiPool extends Threaded