【问题标题】:how to run a php function (not external process) in the background?如何在后台运行 php 函数(不是外部进程)?
【发布时间】:2011-02-10 13:03:01
【问题描述】:

如何在后台而不是进程中运行 PHP 函数?例如,我必须这样做:

(php code)
1º) retrieve data from database#1
2º) retrieve data from database#2
3º) If #1 and #2 have finished, do my calculations.

函数 #1 和 #2 也是 PHP 代码。我不想使用“exec”或“system”,因为它们不是外部进程,它们也是 PHP 代码!我想应该存在一些在后台运行 PHP 函数或行的聪明方法,就是这样。有什么想法吗?

【问题讨论】:

    标签: php background


    【解决方案1】:

    PHP 不做多线程*,所以你想做的事情在同一个脚本中是不可能的。

    您需要启动一个单独的 PHP 进程,该进程通过单独的脚本运行。

    *) there is pcntl_fork 用于 CLI 和可能的 CGI 模式,但它有缺陷,这方面的文档和示例似乎很少,它仅限于 Unix/Linux,我假设你无论如何都在网页上下文中哪里不行。

    【讨论】:

      【解决方案2】:

      正如其他发帖者所说,直接线程是不可能的。

      就您的具体问题而言,有很多方法可以解决。你可以使用MySQLi::multi_query()。第一个查询需要完成才能使用第二个查询的结果

      $mysqli->multi_query($sql1 . ';' . $sql2);
      $result1 = $mysqli->store_result();
      $rows1 = $result1->fetch_all();
      $result2 = $mysqli->store_result();
      $rows2 = $result2->fetch_all();
      

      两个查询是并行执行的。结果是同步返回的,但确实有效。

      您还可以使用register_tick_function() 模拟线程。网上有some docs关于to actually使用记号for threading。但我必须警告你,尝试以这种方式滥用它们通常是一个非常糟糕的主意,因为它不是真正的线程,它不会表现得像它(语句仍然按顺序执行,所以阻塞语句会阻塞一切)。

      【讨论】:

        【解决方案3】:

        Php 确实支持线程 (需要 PECL pthreads >= 0.34)

        你会在这里找到一个例子http://php.net/manual/en/thread.start.php

        【讨论】:

          【解决方案4】:

          您可以设置一个cURL multi handler,它可以并行运行不同的脚本(并从中获取数据)。在我看来,这是在 PHP 中运行多线程脚本的最佳选择。

          不过,您必须进行更改 - 您希望在后台运行的函数必须移动到它们自己的脚本中,并由 cURL 处理程序单独调用。

          http://php.net/manual/en/function.curl-multi-exec.php

          以下是一些使用示例:

          http://codestips.com/php-multithreading-using-curl/

          https://web.archive.org/web/20091014034235/http://www.ibuildings.co.uk/blog/archives/811-Multithreading-in-PHP-with-CURL.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-14
            • 1970-01-01
            • 2013-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多