PHP: предотвратить функцию от возврата значения? - PullRequest
3 голосов
/ 01 июня 2010

Как я могу убедиться, что вызывается функция startProcess();, но без остановки выполнения для myFunction(). Я предполагаю, что есть способ вызвать функцию и не дать ей вернуть свое значение для выполнения этого?

Псевдо-код:

function myFunction() {

    startProcess();

    return $something;       
}

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

Ответы [ 6 ]

5 голосов
/ 01 июня 2010

Вы не можете сделать это. В PHP есть несколько функций, которые разрешают асинхронный ввод-вывод, но ничего похожего на параллелизм, который вам требуется.

Причина отсутствия поддержки языков заключается в том, что PHP предназначен для выполнения краткосрочных сценариев, а параллелизм управляется демоном HTTP.

Смотри также:

3 голосов
/ 01 июня 2010

Чтобы сделать небольшое дополнение к ответу Артефекто, есть некоторые люди, которые пытались воссоздать что-то вроде ситуации. Вы можете найти некоторую информацию об этом с помощью Google, но я сомневаюсь, что это будет полезно, поскольку это просто слишком экспериментально и, вероятно, довольно ненадежно.

Найдена одна ссылка, которая может быть вам полезна.

1 голос
/ 02 июня 2010

Я собираюсь сделать снимок в темноте, но выглядит ли эта функция как решение для вашей общей цели?

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

1 голос
/ 02 июня 2010

Вы смотрели на Gearman для получения такого рода фонового задания?

1 голос
/ 01 июня 2010

Что вы хотите сделать 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.
}
1 голос
/ 01 июня 2010

Насколько я могу судить по вашему вопросу и тегам, вы хотите выполнить некоторую фоновую обработку, то есть, по сути, несколько потоков.

К сожалению, PHP этого не делает. Есть некоторые функции ввода-вывода, которые являются асинхронными, но в целом вы не можете выполнять параллельную обработку в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...