php - 从命令为 pthread 引导 symfony2

标签 php multithreading symfony pthreads

我正在尝试从 symfony 2 命令启动线程。

protected function execute(InputInterface $input, OutputInterface $output)
{
    $parser = $this->getContainer()->get('app.article.parser');
    $providers = $parser->getProviders();
    foreach ($providers as $name=>$provider) 
    {
        $parseThread = new ParseThread($parser, $name);
        $parseThread->start();
    }
}

ParseThread 类:

class ParseThread extends \Thread 
{

private $parser;
private $providerName;

function __construct (Parser $parser, $providerName) 
{
    $this->parser       = $parser;
    $this->providerName = $providerName;
}

public function run () 
{
    $this->parser->parse($this->providerName);
}

}

$this->parser->parse(...) 据我了解,应该在新线程中启动。 在 parse 方法内部,基于字符串 $providerName,初始化了一堆类。

这里的问题是新线程没有引导 Symfony 2,因此没有 Composer 自动加载 - 所以我的类没有被加载。

是否有任何明智的方法可以在每个线程中引导 Symfony 2,从而允许自动加载和所有其他事情正常工作?

最佳答案

PThreads doesn't inherit autoloading 。 不过,这应该不是什么大问题。你可以这样做:

<?php

class ParseThread extends \Thread 
{

    private $parser;
    private $providerName;

    function __construct (Parser $parser, $providerName) 
    {
        $this->parser       = $parser;
        $this->providerName = $providerName;
    }

    public function run () 
    {
        require_once 'location/to/vendor/autoload.php';
        $this->parser->parse($this->providerName);
    }

}

关于php - 从命令为 pthread 引导 symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315393/

相关文章:

php - Guzzle 正在同步发送请求

php - 上传前检查文件属性

c++ - 多个线程无法访问同一个指针而不会出错

symfony - 在symfony2奏鸣曲管理捆绑中设置默认值

symfony - 提交带有虚拟属性(property)的表格

Symfony Encore : Cannot determine webpack context.(你是从项目外的目录执行 webpack 吗?)

php - 我的代码有什么问题 - 循环排序的数组不显示任何结果

php - 按组显示要配置的帖子

java - 同步静态方法和静态方法内的同步块(synchronized block)之间的区别?

c# - 具有 MaxDegreeOfParallelism 和实际线程数的 ParallelOptions