使用多线程从PHP调用Python脚本

时间:2016-09-21 07:20:51

标签: php multithreading pthreads pthreads-win32

我正在使用PHP在浏览器中显示Python输出。由于Python脚本需要很长时间才能打印输出,因此用户界面会挂起,直到Python脚本完成执行。

在PHP中启用了Pthreads for Windows,用于多线程调用调用Python脚本的 shell_exec()函数。尽管使用Pthreads,用户界面仍然会挂起。

以下是代码:

$output_customer_churn_prediction = "";

class WorkerThreads extends Thread {
    private $workerId;

    public function __construct($id)
    {
        $this->workerId = $id;
    }

    public function run()
    {
        sleep(rand(0, 3));
        echo "Worker {$this->workerId} ran" . PHP_EOL;
        $output_customer_churn_prediction = shell_exec('python '.$_SERVER['DOCUMENT_ROOT'].'/analytics/python/neural-net-prediction-customer-attrition.py');
        print_r($output_customer_churn_prediction);
    }
}

$workers[0] = new WorkerThreads(0);
$workers[0]->start();

print_r($output_customer_churn_prediction, true); 

即使使用多线程,用户界面(由PHP生成)也会在调用Python神经网络脚本时挂起。

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

PHP正在缓存输出。您需要停用输出缓存。然后您的浏览器将不会挂起。

请参见ob_flush()