pthreads with phalcon 3.3 - PHP致命错误

时间:2018-02-21 00:45:45

标签: php pthreads threadpool phalcon pool

我是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));

我的问题是:

  1. 新Pool()如何在一个文件中工作但在另一个文件中不工作? 工作文件中没有特殊的包含。

  2. 线程安全已禁用

  3. 尽管汇编了--enable-maintainer-zts \ --with-tsrm-pthreads

1 个答案:

答案 0 :(得分:0)

你的课程正在扩展Threaded:

class Task extends Threaded

你的班级不起作用并没有扩展螺纹:

class MultiapiPool

尝试扩展MultiapiPool以使用Threaded并查看是否可以解决问题:

class MultiapiPool extends Threaded