不要让Laravel / PHP等待python脚本完成

时间:2018-04-04 18:55:21

标签: php laravel hierarchy

当前设置

我目前有一个名为HomeController.php的控制器类,为用户在表单中输入的详细信息创建request,并保存其他详细信息(这不是此问题的一部分)。

然后将此request发送到另一个运行API的控制器类Jobcontroller.phpcareerjet并返回urls

问题

我必须手动需要访问另一个页面来运行API并获取结果,然后必须执行python脚本。 IE:

website.co.uk/output -> URL 1 , URL 2 , URL 3
exec(script1.py)
exec(script2.py)
exec(script3.py)

我想要实现的目标

我当然不想这样做,并且需要一切都要自动化。这意味着,如果用户单击submit,api代码将立即运行,然后python脚本它不会影响前端可用性速度。 (他们不必在同一页上逗留,等待最后一份工作完成)。

我查看了这个队列的实现 - 似乎它只在没有其他请求的情况下运行。

1 个答案:

答案 0 :(得分:0)

这更像是一种架构类型的问题,但您可以尝试以下选项:

<强> 1。创建一个单独的Python应用程序并通过API进行通信

如果必须进行同步操作,您可能希望通过API执行python脚本。只需通过像Flask这样的东西托管您的脚本。

当Laravel向Flask应用程序发送API请求时,它将启动脚本,并通过HTTP API返回结果。

<强> 2。在队列中执行作业

所以基本上与上面的流程相同,但实际上创建了一个Laravel Job,它在后台与应用程序进行通信。用户可以在Laravel应用程序中继续他们的业务,当Job完成后,您可以更新数据库,发送通知等等。

第3。通过PHP shell命令执行Python脚本

我不推荐这种方法用于长期解决方案,但您可以让PHP执行一个shell命令来启动您的python脚本。

让脚本与PHP应用程序进行通信可能会让人痛苦不堪。但这是可能的。