我正在尝试从 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/