[英]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.