我在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不会复制作为对象的静态成员(Threaded
和Closure
对象除外)。这意味着在尝试通过null
获取单个实例时,将在新线程内部返回Yii::app()
。
我可以想到的唯一解决方法-考虑到我以前从未使用过Yii,因此我不知道它的适用性-是为每个线程创建一个新的单例实例。
但是,实际上,在涉及线程处理时,应将全局状态视为一个危险信号。因此,如果一个应用程序或框架大量使用它(就像现在大多数PHP框架一样),那么线程并不是一个切实可行的选择。
关于php - 用线程yii模型扩展组件后yii 1.x无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44976953/