我在项目中使用Laravel框架。
我需要在PHP中调用函数,但我不需要等待它。
例如:
public function payment($Authority)
{
if (test == 1)
$this -> one($Authority); // don't wait for this call.
return view ("site.payment");
}
private function one($Authority)
{
// php code
// python code
}
答案 0 :(得分:1)
您可以尝试使用PThreads扩展程序(http://php.net/pthreads):
<?php
// create your own class from Thread
class MyWorkerThreads extends Thread
{
private $workerId;
private $authority;
public function __construct($id, $authority)
{
$this->workerId = $id;
$this->authority = $authority;
}
// main function
public function run()
{
echo "Worker #{$this->workerId} ran" . PHP_EOL;
echo $authority;
// make some long run tasks
$html = file_get_contents('http://google.com?q=testing');
}
}
...
$worker = new WorkerThreads($i, $Authority);
// start new thread with long run task
$worker->start();
...
// You can wait for the job to be finished at any time, using join
$worker->join();
答案 1 :(得分:1)
Laravel有一个队列作业系统。您可以创建一个作业来调用该代码,并让您的payment
方法将作业分派给队列进行处理。 (假设您不使用sync
驱动程序)。
&#34;队列允许您推迟处理耗时的任务,例如发送电子邮件,直到稍后。推迟这些耗时的任务可以大大加快对您的应用程序的Web请求。&#34; - Laravel 5.3 Docs - Queues
public function payment($Authority)
{
if (test == 1) {
// send to queue for processing later
dispatch(new SomeJob($Authority));
}
return view ("site.payment");
}
答案 2 :(得分:0)
您可以调用另一个进程来使用proc_open运行代码。您也可以将其写入工匠命令,然后在另一个进程中调用命令运行。
以下是使用proc_open()
的示例