我正在使用Laravel 5.1,我试图在一个命令类中启动几个线程:
$documents->chunk(1000, function($documentChunk) use (&$threads, &$threadNumber, &$repository) {
$threads[$threadNumber] = new MyThread($documentChunk);
$threads[$threadNumber]->start();
$this->info("Thread [".$threadNumber."] running");
$threadNumber++;
});
$documents变量之前已经填充了从数据库中检索到的一些数据
在MyThread类中是这样的:
<?php namespace App'Helpers;
use Download;
class MyThreadextends 'Thread {
protected $chunk;
public function __construct($chunk) {
$this->chunk = $chunk;
}
public function run() {
...
$downloads = Download::select(...);
...
}
}
在选择行,我得到一个:
PHP致命错误:Class 'Download' not found
然而,如果我直接调用$threads[$threadNumber]->run()而不是$threads[$threadNumber]->start(),我没有这个错误。也许这是一个类加载的问题,但我不知道真正的问题是什么,如果它可以解决…
如果有人能帮我解决这个问题,我将非常感激,因为我已经花了几个小时来解决这个问题。
谢谢,克里安。
你需要设置自动加载器,这里有帮助
我想这个例子是Symfony,但同样的事情也适用。
我终于找到了一个解决方法。我不再使用线程,但Guzzle。位于我的线程中的代码现在在一个控制器方法中,可以通过URL访问-我做了一个REST API。Guzzle允许我执行异步请求,这正是我想要做的。
查看Laravel的Guzzle文档获取更多信息。