【发布时间】:2018-07-31 11:32:42
【问题描述】:
我是 Phalcon 和 Pthreads 的新手。
我的环境如下:
$ php -v PHP 7.2.2 (cli) (build: Feb 19 2018 10:04:19) (ZTS DEBUG) 版权所有 (c) 1997-2018 PHP 集团 Zend Engine v3.2.0,版权所有 (c) 1998-2018 Zend Technologies Zend OPcache v7.2.2,版权所有 (c) 1999-2018,由 Zend Technologies 提供
$ php -m | grep pthreads 线程
phpinfo() 说明如下:
PHP 版本 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”
违规行是:$pool = new Pool(count($providers));
我的问题是:
new Pool() 如何在一个文件中工作而不在另一个文件中工作? 工作文件中没有特殊的包含。
线程安全已禁用
尽管使用 --enable-maintainer-zts \ --with-tsrm-pthreads 进行编译
【问题讨论】:
标签: php pthreads threadpool phalcon pool