【问题标题】:Call python script from PHP - parallel requests problem从 PHP 调用 python 脚本 - 并行请求问题
【发布时间】:2019-08-02 13:55:23
【问题描述】:

我通过 Nginx 提供的 php 文件中的 exec 阻塞函数调用 Python 脚本。它按预期工作。 Python 脚本使用 webdriver Chrome 执行 Selenium 并返回 xml 输出。

问题是当我同时创建更多请求(2 个或更多)时。第一个请求被处理(nginx,php,python),第二个等待第一个完成。它们不是并行执行的。

直接从 shell 执行的 Python 脚本可以毫无问题地并行执行。

【问题讨论】:

  • 也许您可以发布代码的相关部分,以便我们弄清楚发生了什么

标签: php exec


【解决方案1】:

你有两个选择。

多线程

PHP 本身不支持线程,但是有这个solution。它仍处于试验阶段,需要 PHP 7.2+,但如果您已经在使用 PHP 7.2+,它会很有效。

多处理

您可以通过forking 创建新进程。您可以在answer 中阅读更多关于 PHP 分叉的信息,以及更多关于它的概念 here

或者您也可以使用exec() 以当前方式执行此操作,但您必须将& 放在命令末尾,这样PHP 可能会将它传递给控制台,并且它可以在后台运行并且运行第二个。

还有第三种使用 MQ 引擎的方法,但我对此无能为力,但如果您有兴趣,也可以阅读它。希望这些对您有所帮助。

【讨论】:

    【解决方案2】:

    PHP不是直接异步的,使用pcntl扩展看看this

    【讨论】:

      【解决方案3】:

      从 php-fpm nginx 调用时,pcntl 可能不起作用

      operator & 不是一个好的解决方案,因为我需要提供给客户端的输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-21
        • 2014-06-25
        • 2018-03-25
        • 1970-01-01
        • 2015-08-26
        • 2011-12-25
        • 2017-07-04
        • 1970-01-01
        相关资源
        最近更新 更多