簡體   English   中英

從Yii中的Thread訪問模型

[英]Access model from Thread in Yii

我必須在Yii 1.1應用程序中解析巨大的csv文件。 每行都必須經過驗證並保存到數據庫中。 我決定為此任務使用多線程。

所以這是我在Controller動作中的代碼:

public function parseData($) {
        $this->content = explode("\n", $this->content);

        $thread_1 = new DatalogThread(array_slice($this->content, 0, 7000));
        $thread_2 = new DatalogThread(array_slice($this->content, 7001));

        $thread_1->start();
        $thread_2->start();
    }

和線程(我把它放在模型文件夾中):

class DatalogThread extends Thread {
    public $content;


    public function __construct($content) {
       $this->content = $content;

    }


    public function run() {
       foreach ($this->content as $value) {
            $row = str_getcsv($value);

            $datalog = new Datalog($row);
            $datalog->save();

        }
    }

}

問題是線程無法訪問模型文件:

致命錯誤:在C:\\ xampp ... \\ protected \\ models \\ DatalogThread.php中找不到類'Datalog'

我嘗試了Yii :: autoload(“ Datalog”),但收到以下錯誤:

致命錯誤:無法在第402行的... \\ YiiMain \\ framework \\ YiiBase.php中訪問屬性Yii :: $ _ coreClasses

Yii的使用靜了很多 ,這是不是最好的一種多線程代碼。

您想做的是初始化不知道Yii的線程並重新加載它,我不使用Yii,但是這里有一些解決方法可以讓您了解如何做:

<?php
define ("MY_YII_PATH", "/usr/src/yii/framework/yii.php");

include (MY_YII_PATH);

class YiiThread extends Thread {
    public $path;
    public $config;

    public function __construct($path, $config = array()) {
        $this->path = $path;
        $this->config = $config;
    }

    public function run() {
        include (
            $this->path);
        /* create sub application here */

    }
}

$t = new YiiThread(MY_YII_PATH);
$t->start(PTHREADS_INHERIT_NONE);
?>

這將更好地工作...我想您應該在線程中使用yii所謂的控制台應用程序,因為您不希望它嘗試發送任何標頭或類似的內容...

那應該讓你開始...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM