使用Laravel的线程 - 调用start()时找不到模型类

时间:2015-07-17 14:21:20

标签: php multithreading laravel pthreads

我使用的是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(),我没有这个错误。也许这是一个类加载的问题,但我无法弄清楚什么是真正的问题,如果它可以解决...

如果有人可以帮助我,我会非常感激,因为我已经有几个小时了解这个问题。

谢谢, 基利安。

2 个答案:

答案 0 :(得分:0)

您需要设置自动加载器help here

我认为这个例子是Symfony,但同样适用。

答案 1 :(得分:0)

我终于找到了解决方法。我不再使用线程但是Guzzle。位于我的线程中的代码现在是一个控制器方法,可通过URL访问 - 我制作了一个REST API。 Guzzle允许我做异步请求,这正是我想要做的。

有关详细信息,请参阅Guzzle documentation for Laravel