3

我怎样才能确保startProcess();正在调用该函数,但又不停止执行myFunction(). 我猜有一种方法可以调用一个函数并阻止它返回它的值从而完成这个?

伪代码:

function myFunction() {

    startProcess();

    return $something;       
}

function startProcess() {
    sleep(5);
    // Do stuff that user doesn't should have to wait for.
}
4

6 回答 6

5

你不能这样做。PHP 中有一些函数允许异步 I/O,但与您需要的并发性完全不同。

存在无语言支持的原因是 PHP 旨在执行短期脚本,而并发由 HTTP 守护程序管理。

也可以看看:

于 2010-06-01T18:17:54.720 回答
3

为了对 Artefecto 的回答做一点补充,有些人试图重新创建一种线程情况。您可以使用 google 找到有关它的一些信息,但我怀疑它是否会有所帮助,因为它太实验性并且可能非常不可靠。

找到一个可能对您有帮助的链接。

于 2010-06-01T18:21:00.127 回答
1

据我从您的问题和标签中可以看出,您想做一些后台处理,本质上是多线程。

不幸的是,PHP 不这样做。有一些 IO 函数是异步的,但通常你不能在 PHP 中进行并发处理。

于 2010-06-01T18:19:27.277 回答
1

你想让 startProcess() 做什么?有很多方法可以让用户不必等待。

电子邮件就是一个很好的例子:运行 mail() 的线程一直在旋转,直到消息被接受或拒绝;您不希望用户必须等待。因此,您将任务排队,然后在 cron 上处理您的队列。

function myFunction() {
    addToQueue();
    return $something;       
}

function addToQueue() {
    // add stuff to the queue of tasks
}

function runQueue() {
    // process the queue of tasks; called by cron.
}
于 2010-06-01T19:32:26.657 回答
1

你有没有看过Gearman来解决这种后台任务?

于 2010-06-01T20:20:10.333 回答
1

我将在这里在黑暗中拍摄,但这个功能看起来是否可以成为您整体目标的解决方案?

http://php.net/manual/en/function.register-shutdown-function.php

于 2010-06-01T21:41:32.620 回答