Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Отложенное задание в фоновом режиме


Автор: OverClocker 22.1.2011, 18:37
Коллеги, возникла такая проблема: есть скрипт сайта, а есть задание, которое должно периодически обновлять некоторые записи залогиненного пользователя. Т.е. скрипт в определённой ситуации при навигации пользователя должен автоматически посылать сигнал (триггер, если хотите) этому заданию.

Можно, конечно, сделать так, чтобы задание выполнялось вместе со скриптом, но тогда оно будет очень тормозить процесс загрузки сайта, а на содержание это влияет весьма косвенно. (не страшно, если записи отображаются некоторое время старые)

cron использовать в данном случае также нерационально, потому что для каждого пользователя задание выполняется своё (А может и вовсе не выполняться. Чего его просто так гонять то?)

Надеюсь, объяснил понятно.

Автор: skyboy 22.1.2011, 23:29
давай конкретнее.

Автор: OverClocker 23.1.2011, 09:50
Что именно нужно конкретнее? 
Необходимо запустить часть скрипта так, чтобы она не тормозила обшую загрузку. Т.е., пожалуй, в фоновом режиме.

Автор: skyboy 23.1.2011, 10:17
Цитата(OverClocker @  22.1.2011,  17:37 Найти цитируемый пост)
cron использовать в данном случае также нерационально, потому что для каждого пользователя задание выполняется своё

т.е. как - "своё"? абсолютно уникальный динамически генерируемый код или все же один и тот же алгоритм, один и тот же код, просто для каждого пользователя формируются разные входные данные под этот "одинаковый скрипт"?
Цитата(OverClocker @  23.1.2011,  08:50 Найти цитируемый пост)
Необходимо запустить часть скрипта так, чтобы она не тормозила обшую загрузку.

cron.

Автор: OverClocker 23.1.2011, 10:40
Цитата(skyboy @  23.1.2011,  10:17 Найти цитируемый пост)
абсолютно уникальный динамически генерируемый код или все же один и тот же алгоритм, один и тот же код, просто для каждого пользователя формируются разные входные данные под этот "одинаковый скрипт"?

Формируются различные входные данные. Дело в том, что это обновление происходит достаточно редко у пользователя, при этом, если оно происходит, обновить это всё надо как можно скорее. Вот поэтому запускать каждые 5 минут скрипт по cron, который будет вхолостую работать 90% времени, имхо, не очень хорошо. 

Можно сделать ещё демон. Но это как-то для эстетов...

Автор: solenko 23.1.2011, 12:00
http://en.wikipedia.org/wiki/Message_queue
Ну а какую из реализаций выбирать (AMQ, RabbitMQ, etc) -- дело ваше.

Автор: OverClocker 23.1.2011, 12:04
Спасибо, интересно! Слышал раньше, но не пользовался. Будем пробовать.

Автор: mcTep 25.1.2011, 19:41
Цитата(OverClocker @  23.1.2011,  10:40 Найти цитируемый пост)
если оно происходит, обновить это всё надо как можно скорее.


А нельзя сделать это все в тот момент когда оно происходит? 

Просто мне интересна реальная ситуация, когда необходима именно такая задача. Не могли бы вы рассказать о ней?

Автор: solenko 25.1.2011, 20:02
Реальные примеры:
 -- загрузка видео пользователем с пережатием его в формат, удобный для хранения. 
 -- отправка пользователем сообщения, которое потом отправляется дальше через медленное API
 -- подготовка отчета на ольшом объеме данных

Автор: mcTep 25.1.2011, 20:15
Может можно в нужный момент по curl запускать скрипт какой-либо?

или сокеты

http://habrahabr.ru/blogs/php/67180/

Автор: topy 26.1.2011, 08:57
Запускайте асинхронно AJAX`ом в фоне

Автор: solenko 26.1.2011, 09:24
Цитата(mcTep @  25.1.2011,  19:15 Найти цитируемый пост)
Может можно в нужный момент по curl запускать скрипт какой-либо?
или сокеты
http://habrahabr.ru/blogs/php/67180/

И каким образом это применимо? К чему тут вообще работа с сетью?

Цитата(topy @  26.1.2011,  07:57 Найти цитируемый пост)
Запускайте асинхронно AJAX`ом в фоне 

AJAX в таких задачах может пригодиться для опроса статуса выполняемой задачи, но ни в коем случае не как процесс, в рамках которого задача будет выполняться.

Автор: L1ke2d3v 28.1.2011, 22:09
http://gearman.org/, для тебя в самый раз.

Автор: Stark 12.2.2012, 17:05
У меня похожая задача, потому не думаю что нужно создавать новую тему. Опишу так же вкратце

Пользователь производит какое-то действие на сайте, и в ответ на это действие нужно произвести ряд ресурсоемких операций, так что синхроннно это делать нельзя.

Сейчас я решаю эту проблему с помощью cron, но есть определенные проблемы. Основная из них что есть задержка до 5 минут между действием пользователя и результатом тяжелой операции.

Потому сейчас рассматриваю вариант с брокером очередей (конкретно RabbiMQ). При действии пользователя записываю сообщение в очередь, с этим проблем нет.

Следующим шагом есть создание скрипта обработчика очереди. Вот тут и возникает вопрос. У меня уже  много кода который хотелось бы использовать в обработчике очереди, но он достаточно тяжелый (используется ORM) и закидать его в демон возможно не очень хорошое решение, особоенно если учесть что демон

Опыта с использованием демонов нет, так что хотелось бы услышать может кто уже встречался с подобной задачей?
И может обработчик в виде демона не единственное хорошое решение?

Автор: Fortop 26.2.2012, 20:01
Демон вполне подойдет.
Тем более что есть реализации на php и он уже не так течет как раньше.
Плюс есть fpm. 

Так что можно даже не мучиться с кроном.

Автор: Stark 1.3.2012, 22:31
Цитата(Fortop @  26.2.2012,  20:01 Найти цитируемый пост)
Демон вполне подойдет.
Тем более что есть реализации на php и он уже не так течет как раньше.


Сегодня выложил на production  использую http://pear.php.net/package/System_Daemon, так как показался самым простым, но не разобрался как реализовать многопроцесорность (пока вердикт, что он не умеет)

Работает пол дня зажрал 20 Мб оперативки (при запуске было 16).

Цитата(Fortop @  26.2.2012,  20:01 Найти цитируемый пост)
Плюс есть fpm. 


Не понял для чего упоминание об fpm

Автор: Fortop 1.3.2012, 23:07
Цитата(Stark @  1.3.2012,  22:31 Найти цитируемый пост)
Не понял для чего упоминание об fpm 

http://php-fpm.org/wiki/RU:What_is_PHP-FPM

Автор: Stark 2.3.2012, 14:08
Fortop, 

Я знаю что такое fpm, вопрос был в том как он может мне помочь решить мою задачу. 

Вы же предложыли как вариан, или что?

Автор: Fortop 2.3.2012, 15:20
Цитата(Stark @  2.3.2012,  14:08 Найти цитируемый пост)
Я знаю что такое fpm, вопрос был в том как он может мне помочь решить мою задачу. 

Вы же предложыли как вариан, или что? 

Я конечно предложил вариант.
Но если вы не понимаете чем может помочь fpm прочитав, что там написано.... то вероятно он вам не поможет...

А вообще он позволяет управлять воркерами для выполнения задач и минимизирует время их инициализации.

Автор: solenko 2.3.2012, 17:25
Цитата(Fortop @  2.3.2012,  14:20 Найти цитируемый пост)
Я конечно предложил вариант.
Но если вы не понимаете чем может помочь fpm прочитав, что там написано.... то вероятно он вам не поможет...

Я вот тоже не понимаю каким образом управление web-веркерами может помочь  для управления фоновыми задачами и демонами никак не привязаными к apache.
Так что давайте подробнее

Автор: Stark 2.3.2012, 19:05
Цитата(Fortop @  2.3.2012,  15:20 Найти цитируемый пост)
Я конечно предложил вариант.
Но если вы не понимаете чем может помочь fpm прочитав, что там написано.... то вероятно он вам не поможет...


Я использую fpm в связке с nginx уже где-то год, и никак в голову не приходило его использовать для чего другого кроме как application сервера за nginx.

Раскажие подробнее (ну или дайте ссылку где можно больше об этом почитать) как он может помочь в работе с многопроцесорным демоном, так как уже говорил выше не думаю что многопроцесорного демона можно сделать с помощью System_Daemon.

Автор: Fortop 2.3.2012, 23:55
Цитата(solenko @  2.3.2012,  17:25 Найти цитируемый пост)
Так что давайте подробнее 

У нас есть мастер-процесс.
А есть собственно воркеры, выполняющие задания в виду отсутствия в php потоков.

fpm дает инструменты для организации всего этого, плюс уменьшает затраты на инициализацию процессов.

Добавлено через 1 минуту и 1 секунду
Забыл уточнить. По умолчанию предполагается многопоточная обработка.
В случае единственного процесса fpm скорее всего не нужен.

Автор: Stark 3.3.2012, 00:15
Цитата(Fortop @  2.3.2012,  23:55 Найти цитируемый пост)
У нас есть мастер-процесс.
А есть собственно воркеры, выполняющие задания в виду отсутствия в php потоков.

fpm дает инструменты для организации всего этого, плюс уменьшает затраты на инициализацию процессов.


Прошу прощения, но мы все еще говорим об одном и том же? 
я Вам говорил о том что мне нужно было сделать скрипт, который должен был работать в фоновом режиме

а вы мне говорите о том что php может работать в режиме fcgi и есть очень удобный инструмент, который позволяет всем этим удобно управлять. мне не нужно взаемодействие из веб-сервером

Автор: Fortop 3.3.2012, 07:44
Цитата(Stark @  3.3.2012,  00:15 Найти цитируемый пост)
а вы мне говорите о том что php может работать в режиме fcgi и есть очень удобный инструмент, который позволяет всем этим удобно управлять. мне не нужно взаемодействие из веб-сервером

 smile 
Отстаньте от меня.
Я НИГДЕ не говорил что вам нужно взаимодействовать с веб-сервером.
То, что у вас в голове fpm связан исключительно с nginx это не мои проблемы.

Автор: Stark 3.3.2012, 10:08
Fortop, без комментариев. <sarcasm>Спасибо за ответы</sarcasm>

Автор: Fortop 3.3.2012, 12:35
Цитата(Stark @  3.3.2012,  10:08 Найти цитируемый пост)
Fortop, без комментариев. <sarcasm>Спасибо за ответы</sarcasm> 

Всегда пожалуйста.

Sapienti sat.

Но вам увы не sat, а значит....

Автор: solenko 3.3.2012, 15:15
Цитата(Fortop @  3.3.2012,  06:44 Найти цитируемый пост)
То, что у вас в голове fpm связан исключительно с nginx это не мои проблемы. 

ну у меня улучшенный fastcgi тоже неразрывно связан с вебсервером. Думаю, далеко не у меня одного. 
Так что, будьте добры, просвятите нас темных. Думаю, многие будут благодарны за реальный пример использования fpm для cli скриптов.

Автор: Fortop 3.3.2012, 17:20
Цитата(solenko @  3.3.2012,  15:15 Найти цитируемый пост)
Так что, будьте добры, просвятите нас темных. Думаю, многие будут благодарны за реальный пример использования fpm для cli скриптов

Многопоточный датамайнинг.

У меня как раз на этот месяц стоит в очереди сравнение тредовой модели питона с демоном на php с fpm.

Автор: solenko 5.3.2012, 15:49
Цитата(Fortop @  3.3.2012,  16:20 Найти цитируемый пост)
Многопоточный датамайнинг.

читается не иначе как http://en.wikipedia.org/wiki/Bullshit.

Слова ничего не стоят. Покажите мне код. (с) Линус Торвальдс

Автор: Fortop 5.3.2012, 17:19
Цитата(solenko @  5.3.2012,  15:49 Найти цитируемый пост)
читается не иначе как bullshit.

Слова ничего не стоят. Покажите мне код. (с) Линус Торвальдс 

Это ваше отношение к предложению подождать в течении месяца? smile

Раньше вы более уравновешены. И более.... сообразительны что ли smile

Автор: solenko 5.3.2012, 17:41
Цитата(Fortop @  5.3.2012,  16:19 Найти цитируемый пост)
Это ваше отношение к предложению подождать в течении месяца?

Т.е. вы пока что только _думаете_, что fpm вам как-то может поможет, и проверите это через месяц? )

Цитата(Fortop @  5.3.2012,  16:19 Найти цитируемый пост)
Раньше вы более уравновешены. 

Ну так ждем ответа на протяжении уже недели, а в ответ все общие фразы, т.е. bullshit

Цитата(Fortop @  5.3.2012,  16:19 Найти цитируемый пост)
И более.... сообразительны что ли

Я сразу же сказал что не представляю как fpm может быть использован в cli скриптах. Собственно, пытаясь понять это и поддерживаю жизнь темы. Судя по тому, что больше никто в теме не пишет, то этим сакральным знанием (или догадками) обладаете только вы. Жаль поделиться не спешите.

Цитата(Fortop @  2.3.2012,  22:55 Найти цитируемый пост)
Забыл уточнить. По умолчанию предполагается многопоточная обработка.
В случае единственного процесса fpm скорее всего не нужен.

Кстати, было бы непохо пример многопоточности в php. Думаю, удивите очень многих показав пример.

Автор: Stark 5.3.2012, 17:53
Цитата(solenko @  5.3.2012,  17:41 Найти цитируемый пост)
Собственно, пытаясь понять это и поддерживаю жизнь темы


я тоже питался поддержать жызнь темы по той же причине, но полчучив в ответ 

Цитата(Fortop @  3.3.2012,  07:44 Найти цитируемый пост)
Отстаньте от меня.


понял что ответ врят-ли будет

Автор: solenko 6.3.2012, 14:17
Fortop! Fortop! Fortop!  - скандировали жаждущие новых знаний.

// добавим смысла в сообщение

Если вам нужно реализовать очередь с "мгновеной" реакцией, но нет желания разворачивать MQ сервер, то стоит присмотреться к вашей СУБД -- возможно, она имеет механизм LISTEN/NOTIFY.
100% поддерживают этот механизм postgre и redis

Автор: Fortop 6.3.2012, 16:43
Цитата(solenko @  5.3.2012,  17:41 Найти цитируемый пост)
Т.е. вы пока что только _думаете_

? Ссылку что я давал на fpm вы вовсе не читали?
Это из разряда смотрю в книгу - вижу фигу?

Цитата(solenko @  5.3.2012,  17:41 Найти цитируемый пост)
Кстати, было бы непохо пример многопоточности в php. Думаю, удивите очень многих показав пример. 

Ох, таки я прав про книгу.
Если для вас открытие(хотя с чего бы вдруг? старческий склероз?), то: http://www.ibm.com/developerworks/ru/library/os-php-multitask/

Естественно речь не идет о threads. Но умному достаточно для понимания, куда делся ваш интеллект?

Автор: solenko 6.3.2012, 16:50
Цитата(Fortop @  6.3.2012,  15:43 Найти цитируемый пост)
сли для вас открытие(хотя с чего бы вдруг? старческий склероз?), то: http://www.ibm.com/developerworks/ru/libra...-php-multitask/

Естественно речь не идет о threads. Но умному достаточно для понимания, куда делся ваш интеллект? 

Для вас неблокирующий ввод-вывод и мультипоточноть дествительно одно и то же?

Интересно,
Цитата(Fortop @  3.3.2012,  16:20 Найти цитируемый пост)
Многопоточный датамайнинг.

тоже превратится в краулера на curl_multy_* ?

Цитата(Fortop @  6.3.2012,  15:43 Найти цитируемый пост)
? Ссылку что я давал на fpm вы вовсе не читали?
Это из разряда смотрю в книгу - вижу фигу?

Видимо да. В абсолютно всех ссылках о fpm говорится что это улучшенный fastcgi. А вы так и не смогли привести пример использования fpm для CLI.

Добавлено через 1 минуту и 12 секунд
Я не понимаю, неужели так сложно привести пример а не пытатся рассказать мне, что я не умею работать с литературой?

Автор: Fortop 6.3.2012, 17:23
Цитата(solenko @  6.3.2012,  16:50 Найти цитируемый пост)
тоже превратится в краулера на curl_multy_* ?

Омг.
Это был всего лишь пример.
И курл тут вовсе не причем.

Только из уважения к вашему возрасту(???  smile ). 

Многопоточная обработка на php отсутствует как класс.
Любые упоминания многопоточности в php чаще всего это curl_multi или stream_select(для неблокирующих сокетов), и реже многопроцессный демон с воркерами.
Естественно что это не классические реализации "многопоточности", но если мозг не совсем усох, то человек помнит, что php не поддерживает многозадачности в потоках (threads).

Это лирика, и я сильно сомневаюсь что вы ее не знали.

Цитата(solenko @  6.3.2012,  16:50 Найти цитируемый пост)
Я не понимаю, неужели так сложно привести пример а не пытатся рассказать мне, что я не умею работать с литературой? 

У меня есть в текущей реализации несколько демонов со сторонним worker-manager (на Си), работает вполне отлично и давно. Реализовывать подобное исключительно для вас - у меня нет ни времени ни желания, но в списке задач есть одна на работу с fpm о чем я вам и сказал.
Так что, если бы вы не ерепенились, а спокойно подождали, то получили бы желаемое (ну или посыпание головы пеплом с моей стороны, что маловероятно, но возможно smile)

Но у вас действительно какие-то сложности с пониманием. Раньше у нас с вами таких проблем не наблюдалось smile

Автор: solenko 6.3.2012, 18:22
Цитата(Fortop @  6.3.2012,  16:23 Найти цитируемый пост)
Это лирика, и я сильно сомневаюсь что вы ее не знали.

Я то вроде и знаю, но вы так упорно говорили именно о многопоточности, что варианта у меня было два -- либо что-то поменялось, либо вы используете неправильный термин. Таки неправильный термин.

Цитата(Fortop @  6.3.2012,  16:23 Найти цитируемый пост)
У меня есть в текущей реализации несколько демонов со сторонним worker-manager (на Си), работает вполне отлично и давно.

Ну так спора о том, что php демоны работают и не было. 


Цитата(Fortop @  6.3.2012,  16:23 Найти цитируемый пост)
Реализовывать подобное исключительно для вас - у меня нет ни времени ни желания, но в списке задач есть одна на работу с fpm о чем я вам и сказал.

Я так и не получил ответа каким образом fpm поможет без использования FastCGI. Пока все это звучит как "я думаю мне поможет fpm, но как -- не знаю". 
Расскажите хоть о том, как по-вашему должно повлиять использование fpm и за счет чего.

Автор: Fortop 7.3.2012, 00:00
Цитата(solenko @  6.3.2012,  18:22 Найти цитируемый пост)
Расскажите хоть о том, как по-вашему должно повлиять использование fpm и за счет чего.

Собственно для контроля за обработчиками.
А для чего еще? smile
Детали? Их пока нет, но мануал звучит более чем обнадеживающе. Работа без веб-сервера по fcgi протоколу думаю тоже особых сложностей вызвать не должна.

Автор: solenko 11.3.2012, 10:39
Цитата(Fortop @  6.3.2012,  23:00 Найти цитируемый пост)
Детали? Их пока нет, но мануал звучит более чем обнадеживающе.

Т.е. вы таки хамили мне и Stark основываясь исключительно на мануал (вернее вашу его интерпретацию). Ловите минус. Если появятся хоть какие-то детали, имеющие практическое потверждение, с удовольствием компенсирую его плюсом.

Автор: Fortop 12.3.2012, 11:04
Цитата(solenko @  11.3.2012,  10:39 Найти цитируемый пост)
Т.е. вы таки хамили мне

Опа?
А вы готовы привести доказательства моей неадекватной реакции на свое свинство? smile
Быть может я "в порыве страсти" что-то упустил?  smile

И это...
Цитата(solenko @  11.3.2012,  10:39 Найти цитируемый пост)
компенсирую его плюсом.

Не напрягайтесь ибо сугубо насрать.
Факты они несколько важнее вашей личной оценки smile если я окажусь не прав, это будет более существенно для меня, чем финтифлюшки от вашего имени.
Но это так... лирика.

Автор: Stark 12.3.2012, 13:15
Цитата(Fortop @  12.3.2012,  11:04 Найти цитируемый пост)
А вы готовы привести доказательства моей неадекватной реакции на свое свинство


что Вы подразумеваете под свинством? Вам вроде никто не хамил. Вас только попросили детальнее раскрить вопрос который Вы сами задели

Автор: solenko 13.3.2012, 04:39
Цитата(Fortop @  12.3.2012,  10:04 Найти цитируемый пост)
Опа?
А вы готовы привести доказательства моей неадекватной реакции на свое свинство? 
Быть может я "в порыве страсти" что-то упустил? 

Не понял вопроса. Вам четкие ссылки на хамство? И о каком моем свинстве речь?

Цитата(Fortop @  12.3.2012,  10:04 Найти цитируемый пост)
 если я окажусь не прав, это будет более существенно для меня

Вот если бы изначально было высказано в тоне "я думаю это может помочь", а не "я знаю, а если вы не понимаете, то тупые", то и вопроса не возникло бы.

Кроме того, задумайтесь о том, что форум читают многие. В частности те, кто не в состоянии оценить адекватность ваших догадок. И онм могут потратить не один час на попытку прикрутить fpm к сути темы. Давайте не будем тратить их время, ок?

Автор: Fortop 26.3.2012, 17:32
так ну что. Дошло дело до непосредственной реализации, которая сейчас в процессе.

Для желающих кстати.
http://efiquest.org/2011-10-22/55/

Автор: Stark 12.4.2012, 12:16
Цитата(Fortop @  26.3.2012,  17:32 Найти цитируемый пост)
Для желающих кстати.
http://efiquest.org/2011-10-22/55/ 


И какое это имеет отношение к теме?

Цитата

created a phpfpm module which allows to directly talk to the fastcgi via socket and execute arbitrary PHP scripts


а HTTP сервер на php как по мне это перебор)

Автор: Fortop 12.4.2012, 23:29
Цитата(Stark @  12.4.2012,  12:16 Найти цитируемый пост)
И какое это имеет отношение к теме?

Я вам уже писал - для вас... никакого.
Идея может помочь тому, кто понимает как ее можно использовать. Это не про вас.

Интересующимся. Основной эффект, ради чего все затевалось.

workermgr  la = 1.5-1.8
php-fpm    la = 0.6-0.9


Автор: Stark 14.4.2012, 13:37
Народ, хоть кто-то адекватный понимает о чем он?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)