我正在尝试从 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();
}
}
解析线程类:
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 引导,因此没有作曲家自动加载 - 所以我的类没有被加载。
是否有任何明智的方法可以在每个线程中引导 Symfony 2,从而允许自动加载和所有其他事情正常工作?
P线程不继承自动加载 https://github.com/krakjoe/pthreads/issues/68。
不过,这应该不是什么大问题。你可以这样做:
<?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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)