Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
nikki4
0 / 0 / 1
Регистрация: 20.07.2010
Сообщений: 93
1

Как запустить функцию из другого файла с задержкой, не тормозя основной скрипт?

21.09.2016, 11:43. Просмотров 326. Ответов 3
Метки нет (Все метки)

Есть 2 скрипта.
1й вызывает функцию из 2го с передачей параметра для обработки.
PHP
1
2
include_once ('test2.php'); 
test(10);
2й скрипт (test2.php) - это функция (test), которая ждет несколько минут (sleep), а затем начинает выполнять действия по обработке полученного параметра, а затем отсылает результат на почту (mail).

Сейчас работает так: пока не выполнится test, test1.php ждет.
А надо так: 1й скрипт должен дальше заниматься своими делами. А 2й скрипт уже работает с 3м и высылает на почту, никак не сообщая о результате выполнения 1му скрипту.

Начал гуглить. Там много всяких каких-то функций. Процессы, потоки... запутался. что в данном случае следует использовать?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2016, 11:43
Ответы с готовыми решениями:

Как запустить Sub модуля/формы файла XLS из другого файла
Задача Загружается файл XLS. Он вызывает открытие другого файла, который должен запускать свои...

Как вызвать функцию из другого файла без подключения файла функций
Можно так сделать или нет?

Как каждый раз вызывать функцию с разной задержкой?
К примеру у меня есть функция: var Sector = document.getElementById("Sector"); var Window =...

Запустить скрипт для передачи файла на сервер
клиентский и серверный скрипт для передачи файла от клиента к серверу через интернет. Считаем...

Как запустить консоль из другого проекта?
Я добавил в ссылки WindowsFormsApp1 проекта ConsoleApp1 проект когда пишу private void...

3
Para bellum
Эксперт PHP
4190 / 3119 / 1011
Регистрация: 06.01.2011
Сообщений: 9,092
21.09.2016, 11:53 2
Обычно делается так:
1) Создаётся отдельный скрипт, запуск которого осуществляется с помощью cron.
2) Создаётся хранилище (таблица в базе или в системе кэширования (Redis, Memcached)), куда первый скрипт записывает задания в очередь.
3) Создаётся задание для cron, чтобы вызывал отдельный скрипт каждые N минут.
4) При запуске скрипта из cron, скрипт ищет задания. Если есть -- выполняет.
0
nikki4
0 / 0 / 1
Регистрация: 20.07.2010
Сообщений: 93
21.09.2016, 12:53  [ТС] 3
А вариант какой-то попроще есть? Как-то очень сложно звучит..
Да и зачем запускать скрипт каждые 5 минут? Это же еще и лишняя нагрузка.
Ведь запуск этого скрипта будет происходить в не опредленное время, но достаточно редко. Раз в день-два.

Это для скрипта проверки на уникальность текста.
Автор публикует текст на сайте
Движок передает его онлайн сервису на проверку (скрипт1)
в течении 5 минут тот сервис проверяет текст, затем можно будет получить результаты через скрипт2 по идентификатору, который он получает через скрипт1 test('id'); и высылает на почту
0
Зверушь
456 / 364 / 94
Регистрация: 01.05.2010
Сообщений: 1,745
21.09.2016, 14:32 4
nikki4, это довольно сложная тема, сам еле разобрался.
Объяснить, боюсь, не смогу. Таки гуглите про процессы, потоки... Смысл в том, чтобы скрипт запускал не функции из проинклюденых файлов, а запускал другой скрипт на выполнение в другом процессе. Как буд-то ты открыл две вкладки в браузере, на одной у тебя играет музыка с вк, а на другом запущено видео с ютуба Согласиь, ты не можешь на одной вкладке делать это одновременно. Вот такая вот аналогия.
Могу только привести свой код в качестве примера, который решал подобную задачу. Скрипт, который выполняет этот код запускается по крону. Скрипт выступает в роли базового скрипта, который запускает другие скрипты в других процессах. Мне нужно было распараллелить скрипт парсера, чтобы быстрее работал
Код, конечно, вырван из контекста, но думаю понять как это работает можно:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
* Launch job. It is depended on operation system.
* For windows we should use Com object.
* Since php 5.4.5 it is not enabled in php.ini file.
* If you get error try to add row "extension=php_com_dotnet.dll"
* in your php.ini file.
*/
if ($this->get_os_type() == 'unix') {
    $cmd = '/usr/bin/php /var/www/html/symfony '.$name.' --stream-number='.($cnt_running+1);
    if (isset($job['params'])) {
        $cmd .= ' ' . $job['params'];
    }
    $cmd = $cmd.' > /dev/null 2>&1 &';
    $this->logger->info('RUN: '.$cmd);
    exec($cmd);
} else if ($this->get_os_type() == 'windows') {
    $cmd = 'php symfony '.$name.' --stream-number='.($cnt_running+1);
    if (isset($job['params'])) {
        $cmd .= ' ' . $job['params'];
    }
    if (!isset($com)) {
        $com = new Com('WScript.shell');
    }
    $this->logger->info('RUN: '.$cmd);
    $com->run($cmd, 10, false);
} else {
    $this->logger->error("Unknown operating system. Stop program.\n\n");
    throw new Exception('Unknown operating system.');
    break;
}
Добавлено через 8 минут
В $cmd у меня находится путь к программе (скрипту php), которую надо запустить на выполнение и продолжить работу, не дожидаясь ее завершения.
0
21.09.2016, 14:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2016, 14:32

Как запустить Private Sub из другого модуля?
Ааа, добрый день! Подскажите, пожалуйста, как запустить программу Private Sub из другого модуля?

Как запустить метод из другого класса?
есть класс: public class Class1 extends DialogFragment implements OnClickListener { TextView...

Как запустить метод из другого окна?
Подскажите пожалуйста, смотрю примеры разные но не пойму как правильно сделать. Имеем окно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.