php - 用线程yii模型扩展组件后yii 1.x无法正常工作

标签 php multithreading yii pthreads

我在xampp中添加了pthreads,并且在没有yii框架的情况下也可以正常工作,并且在yii框架中也通过yii模型,yii函数和包括扩展名的功能添加了pthreads。 yiimailer在此类中不起作用,回显Yii::app()-> basePath;也无法正常工作

我的组件类

class SendEmailThreads extends Thread{
    private $sendTo;
    private $subject;
    private $bodyText;
    public function __construct($sendTo, $subject, $bodyText){
        $this->sendTo = $sendTo;
        $this->subject = $subject;
        $this->bodyText = $bodyText;
    }
    function run(){
        echo Yii::app()->basePath;
        sleep(1);


    }
}

在这里使用
public function actionBulkEmail(){    

for($i=0;$i<3;$i++){

   $pool[] = new SendEmailThreads('frazghuman@gmail.com','test bulk','test by fraz'); 
 }

 foreach($pool as $worker){
    $worker->start();
 }

 foreach($pool as $worker){
    $worker->join();
 }

}

最佳答案

问题在于,pthreads不会复制作为对象的静态成员(ThreadedClosure对象除外)。这意味着在尝试通过null获取单个实例时,将在新线程内部返回Yii::app()

我可以想到的唯一解决方法-考虑到我以前从未使用过Yii,因此我不知道它的适用性-是为每个线程创建一个新的单例实例。

但是,实际上,在涉及线程处理时,应将全局状态视为一个危险信号。因此,如果一个应用程序或框架大量使用它(就像现在大多数PHP框架一样),那么线程并不是一个切实可行的选择。

关于php - 用线程yii模型扩展组件后yii 1.x无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44976953/

相关文章:

php - 如何将月份添加到特定日期

php - 如何访问文章中的模板颜色?

PHP 数组 : Contents from result set

multithreading - Erlang BEAM 机器的减少

java - JVM线程调度算法是什么?

linux - Vagrant - 如何挂载 virtualbox 共享文件夹? ("vboxsf"不可用)

php - mysql各种方法导入报错

multithreading - 带有 Visual Studio Express 2010 表单应用程序的 C++ 多线程

activerecord - AR模型中的关系函数,多对一关系

yii - HTML 按钮调用 Controller /操作