我使用的是Laravel 5.1,我正在尝试在Command类中启动多个线程:
$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致命错误:未找到“下载”类
但是,如果我直接调用 $ threads [$ threadNumber] - &gt; run()而不是 $ threads [$ threadNumber] - &gt; start(),我没有这个错误。也许这是一个类加载的问题,但我无法弄清楚什么是真正的问题,如果它可以解决...
如果有人可以帮助我,我会非常感激,因为我已经有几个小时了解这个问题。
谢谢, 基利安。
答案 0 :(得分:0)
您需要设置自动加载器help here
我认为这个例子是Symfony,但同样适用。
答案 1 :(得分:0)
我终于找到了解决方法。我不再使用线程但是Guzzle。位于我的线程中的代码现在是一个控制器方法,可通过URL访问 - 我制作了一个REST API。 Guzzle允许我做异步请求,这正是我想要做的。
有关详细信息,请参阅Guzzle documentation for Laravel。