![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
Есть сложный скрипт, который должен обрабатывать некоторые данные. Время обработки данных будет обычно всегда по несколько минут длиться. Скрипт будет запускаться через CRON каждую минуту или же раз в 5 минут.
Вопрос: Лучше писать этот скрипт на PHP или Perl? PHP ведь накладывает ограничение на время исполнения скрипта в 30 сек. Ясно, что это значение через php.ini можно изменить, но ведь всего сервера.... Впрочем, мне не нужно мой скрипт выполнять через веб-сервер. А устроит прямой запуск. Как его через Крон запускать? Так? php /etc/script.php В этом случае не будет ограничения на время выполнения? |
|||
|
||||
-=Ustas=- |
|
||||||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 32 Всего: 69 |
Ну зачем же?! ![]()
Теперь смотри, время обработки - несколько минут, периодичность запуска - каждую минуту. Таким макаром сервак у тебя загнется через n-ое количество времени. ![]() -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
||||||
|
|||||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
не загнется, т.к. далеко не всегда время обработки - несколько минут. |
|||
|
||||
AntonioBanderaz |
|
|||
![]() Velichko Anton ![]() ![]() Профиль Группа: Участник Сообщений: 851 Регистрация: 28.4.2005 Где: Санкт-Петербург Репутация: 2 Всего: 18 |
Можно и не только так сделать,всё это дело мона в бесконечный цикл засунуть... Но тогда переодичность упадёт.
Только в начале срипта поставь set_time_limit(0); А лучше всего использовать нативную прогу, которую ты будешь запускать через system или exec, строишь демон на PHP. -------------------- ГЫ... |
|||
|
||||
AkimVital |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.11.2005 Репутация: нет Всего: нет |
По своему опыту скажу:
похожие программы на ПХП жрут 98% Memory и дохрена эфирного времени процессора, в результате чего апач рискует в конце концов cдохнуть и перезапуститься (скрипт рискует неотработать полностью - для некоторых систем это критично) и это затягивается надолго. Если PHP - модуль CGI, результаты не столь плачевны. В то время как Perl предназначен для таких целей, быстрее выполняется и (по моей практике) не потребляет больше 5-10% Memory. Апач от него тоже вряд ли сдохнет =) Если Запускается кроном - однозначно не ПХП ибо крон выполняет команды(!) а пхп вызывается апачем (исключение опять же CGI-PHP) для этого в начале файла надо как и перлу прописать #!/usr/bin/php И естесно сделать его исполняемым... Это сообщение отредактировал(а) AkimVital - 10.12.2005, 22:26 |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Нет. (100% не дам, но где-то проскальзывало). Демона лучше вобще писать на Си. ПХП для этого, мягко говоря, не годиться. Перл - получше, но тоже не сильно удачно, по сравнению с сями. |
|||
|
||||
AkimVital |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.11.2005 Репутация: нет Всего: нет |
![]()
Это вообще смешно... Это сообщение отредактировал(а) AkimVital - 10.12.2005, 22:29 |
||||
|
|||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
дык, а разве нельзя дать команду: php myscript.php ? Разве не будет работать также, как perl myscript.pl ? |
|||
|
||||
AkimVital |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.11.2005 Репутация: нет Всего: нет |
можно, только ключ нужен, по-моему -r Добавлено @ 22:33 php -h Usage: php [options] [-f] <file> [args...] php [options] -r <code> [args...] php [options] [-- args...] -a Run interactively -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse <file>. -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -r <code> Run PHP <code> without using script tags <?..?> -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z <file> Load Zend extension <file>. args... Arguments passed to script. Use -- args when first argument starts with - or script is read from stdin |
|||
|
||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
раз можно, то какие проблемы? Даже с тем же демоном на пхп, построительство которого ты назвал смешным. Есть аргументы? |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Wowa php как демон тяжелый получается.
|
|||
|
||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
за счет чего? |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Не ориентирован ПХП на такие вещи. Да, может и на каких-то задачах это не будет заметно, но на других - да. |
|||
|
||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
я плохо могу себе представить такую задачу, т.к. не вижу причин для тормозов скрипта. Пока мне их тут тоже никто не назвал.. |
|||
|
||||
AkimVital |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.11.2005 Репутация: нет Всего: нет |
Есть: хотя бы если это демон, он должен иметь хоть какуб-то степень свободы (запуска, завершения) - ага... модуль апача как раз тот случай !!! А остальное уже было сказано... читай форум внимательно. Добавлено @ 22:58
наприм, то же взаимодействие с базой данных, происходит через сокеты. Сделай 100 000 инсертов на ПХП и на перле и ты увидишь разницу... Это сообщение отредактировал(а) AkimVital - 10.12.2005, 22:59 |
||||
|
|||||
Wowa |
|
||||||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
причем тут модуль апача? Это надо быть идиотом, чтобы запускать через КРОН пхп-скрипт через АПАЧЕ. Добавлено @ 22:59
А в perl разве иначе?
Каких инклудов? |
||||||
|
|||||||
AkimVital |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.11.2005 Репутация: нет Всего: нет |
сори - опечатался - исправился - инсертов SQL.
Идиотом не надо быть, что бы ставить ПХП как модуль Апач - таких в мире гдето 70% в перле сам перл иначе работает... учи перл.... или просто попробуй, как я сказал.... Это сообщение отредактировал(а) AkimVital - 10.12.2005, 23:03 |
|||
|
||||
Wowa |
|
||||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
Естественно, т.к. это для другой нужды сделано. Мне никто не мешает иметь ПХП, как модуль апача для работы сайта и иметь простой PHP-интерпритатор для запуска всяких скриптов по обслуживанию сайта через крон. Добавлено @ 23:12
Ну такое лучше сразу через mysql BASE < base.sql |
||||
|
|||||
AkimVital |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.11.2005 Репутация: нет Всего: нет |
Я так понял это была тема дисскусии. Раз ты сам решил писать все на ПХП - вот и хорошо. Я все-го лишь пытался помочь. Скажу еще, что как-то я сделал подобный демон, который работал 1.5 часа (я по TOP'у смотрел) и грузил сервер так, что апач еле на запросы пользователей отвечал. Перл в той ситуации показал себя лучше. Добавлено @ 23:15
Не, ты ради интереса попробуй эту задачу решить и на ПХП и на перл. |
||||
|
|||||
Wowa |
|
||||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
зависит от того, как написано... Если написано полностью одинаково на обоих язык,т.е. используются аналогичные функции и алгоритм на 100% совпадает, то нужно бы выявить за счет чего пхп-скрипт в этом случае работал хуже. Мне вот это как раз и интересно. А перл я итак знаю, несколько лет на нем программировал. Добавлено @ 23:22
Он у тебя через тебя mod_php работал? |
||||
|
|||||
Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Обоснуй. Когда мы запускаем пхп скрипт из под крона, мы его можем запустить как shell скрипт, указав обработчик, т.е. интерпретатор, так же как в Perl'e #!usr/bin и т.п. Апач тут вообще никакого отношения не имеет.
Ну смотри. Вот два варианта, Си и ПХП. Так. Очевидно, что ПХП более медленный чем Си. Так? Очевидно, что к примеру с сокетами он будет работать медленнее, хотя бы потому что его код будет транслироваться на код сей (грубо сказал, понимаю). Си же сам понимаешь более отлаженный язык, более низкоуровневые, и с сокетами работать будет быстрее... Если конкретно задачу, то - чтение порта. |
||||
|
|||||
AntonioBanderaz |
|
|||
![]() Velichko Anton ![]() ![]() Профиль Группа: Участник Сообщений: 851 Регистрация: 28.4.2005 Где: Санкт-Петербург Репутация: 2 Всего: 18 |
Скорее потому что Си не скриптовый язык... PHP скрипт, компилится при каждом запуске скрипта, а Си один раз (конечно не всегда)... WowaА что за действия должен скрипт выполнять? -------------------- ГЫ... |
|||
|
||||
Wowa |
|
||||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
шерстить базу, кое-что находить и изменяя снова записывать. Добавлено @ 16:48
Скорее или нет - это я и хочу выяснить. Если скрипт запускается раз в минуту, то мне совершенно все равно - скриптовый он или нет. Если было бы несколько вызовов в секунду, тогда это имело бы значение. А так.. |
||||
|
|||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Тут выгоднее все-таки сделать демона на сях, чтобы он не каждые 60 секунд занова грузился, а всегда висел в RAM. |
|||
|
||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: 1 Всего: 290 |
из-за скорости работы с сокетами??? Вроде и на перл тогда можно.., раз говорите, что пзп медленнее |
|||
|
||||
Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 1 Всего: 6 |
Возможно ты хотел сказать что будет медленнее обрабатывать данные, поступившие из сокета??? php ведь не бейсик-80, где каждая строка при выполнении транслировалась... В любом случае, я считаю это не критичным, потому что во многих случаях играет роль скорость разработки а не 2% выигрыш в скорости. Не на 286 сидим ведь... Очень разумно было сказано за выполнение скрипта как шелл-скрипта, с указанием в заголовке обработчика. Действительно апач тут вообще не учавствует, ДАЖЕ если пхп установлен как модуль(!). Правда это не сработает, если пхп установлен ТОЛЬКО как модуль(.so), и нет его бинаря в системе. А в общем, схема с использованием пхп как скриптового языка оправдывает себя на все 100%. (Mal Hack, не тебе ![]() Не будет хватать ресурсов - подымет вопрос снова, только уже в другом контексте. Так что Wowa, никого не слушай и делай как тебе нравится перл/пхп в общем дадут одинаковый результат. -------------------- |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Не забывай, что демон на си уже исполняемый файл, а пхп еще должен транслироваться. Хорошо если как демон будет работать, а если через крон каждый раз транслироваться не есть хорошо. |
|||
|
||||
Alone |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 11.5.2003 Где: Dnepropetrovsk, U A Репутация: 1 Всего: 6 |
![]() ![]() Я сам нередко использую пхп в качестве быстрого написания шелл-скриптов. ![]() -------------------- |
|||
|
||||
mxp100 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 2.10.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Из личного опыта
Был скрипт запускаемый из крона каждый 1 час он выполнял перенос таблицы (закачанный каталог товаров, около 80 тыс. записей) в основную таблицу на PHP4 скрипт выполнялся около 1-1.5 часа (хотя объемы не колосальные), тот же самый скрипт написанный на Perl выполнялся 10-20 мин. выводы делайте сами ;) P.S. Хотя в основном использую PHP как более удобный язык |
|||
|
||||
-=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 32 Всего: 69 |
[offtop]
mxp100, доброе утро!!! Почти год прошел с предыдущего поста ![]() [\offtop] -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
G0rinich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.8.2006 Репутация: 1 Всего: 1 |
Дефективно пишете дорогой ))) Из личного опыта. Для одного сайта писался скрипт, который загружал данные из xml файла (15Мб!) в БД. Выполнялось порядка 210К запросов. Разбор XML+занесение данных в БД после долгих мучений заняло 17 секунд на процессоре 800MHz. И все это на РНР!!! Wowa, скрипт можешь писать как на Perl, так и на РНР. На чем удобнее на том и пиши. Если конечно не упираешься во временные рамки и надо ресурсы экономить. Т.к. скрипт будет запускаться по крону, его по времени никто ограничивать не станет. РНР скрипт запущенный из консоли будет выполняться любое количество времени. В общем-то как и Perl скрипт. Только вначале скрипта обязательно надо #!/usr/bin/php или где он там на сервере лежит. Далеко не правда, что РНР будет хавать весь процессор, а Perl только чуть-чуть. При работе с БД процессор будет хавать именно БД, а не скрипт. На Perl решение может выглядеть красивее. И если ты очень хорошо знаешь Perl, то и быстрее. Если твой код на Perl выглядит как код на РНР, то можно с уверенностью сказать, что Perl ты не знаешь и писать на нем что-то серьезное не стоит. Такой код быстрее работать не будет. |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
G0rinich, поддерживаю.
У меня была подобная по тяжеловестности задача, 5Mb XML, количество запросов к БД не мерил, но вероятнее всего возле 100К. Время выполнения в пределах одной-вух секунд. -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: нет Всего: 36 |
а почему не питон?
![]() Это сообщение отредактировал(а) pythonwin - 30.10.2006, 14:30 |
|||
|
||||
kshyms |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 303 Регистрация: 30.8.2006 Где: Душанбе Репутация: нет Всего: 0 |
Wowa
Очень хорошая идея. Имеет практическую пользу и хорошие перспективы. IMHO. Если действительно PHP, который исполняется на сервере этим скриптом устанавливаются свойства C и без юзера любой скрипт с добавлением вашего демона будет самостоятельно запускаться. Это во первых экономия, а во вторых оптимизация и автоматизация. Обязательно применю его в своих исследованиях и буду докладывать о проблемах и успехах. |
|||
|
||||
kshyms |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 303 Регистрация: 30.8.2006 Где: Душанбе Репутация: нет Всего: 0 |
Здесь нашел А может так лучше? Но пока оба скрипта и ваш и этот не работают. Что не так? Это сообщение отредактировал(а) kshyms - 8.1.2008, 09:50 |
|||
|
||||
kshyms |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 303 Регистрация: 30.8.2006 Где: Душанбе Репутация: нет Всего: 0 |
30 1 * * 1 /home/site/script.php
мин час любой день любоого месяца еще такой cron оказывается есть Но самое главное оказывается у провайдера нужно спрашивать как его настраивать. То есть у всех по разному. Инфо к размышлению ![]() |
|||
|
||||
Resha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 14.3.2008 Репутация: нет Всего: нет |
Вот это жесть ![]() ![]() ![]() ![]() Проблема с перегрузкой решается просто: Запускаете скрипт - записываете файл с именем - pid php-процесса - в папочку (processes, например). По крону остается только запускать скрипт, который будет удалять файлы несуществующих процессов и добавлять необходимое количество новых процессов. Лично у меня было два скрипта - dispatcher и script. Первый запускает скрипты и отслеживает наличие необходимого количетва процессов скрипта script, второй выполняет нужные нам действия и по завершению запускает новый процесс script. Система работает, как часы ![]() Удачи ![]() |
|||
|
||||
nerezus |
|
||||||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 12 Всего: 43 |
P.S. Эти ф-ии в пхп, кстати, написаны на C. Но к делу отношения это не имеет. |
||||||||
|
|||||||||
w2w |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.9.2008 Репутация: нет Всего: 1 |
Я работаю только в Linux, в качестве скриптового языка для простеньких вещей использую bash, для сложненьких - php, пока проблем с тормозами и прочими вещами не замечал.
По ходу прочтения ветки заметил следующее: 1. Некоторые товарисчи не в курсе, что php можно использовать как cli инструмент. К примеру, можно сделать так:
Получим на выходе аналог функции phpinfo(), но для консоли. Отлично читаемый вывод, без хтмл тегов. Что характерно - никаких утечек памяти, никаких нагрузок на апач, более того, апача может и не быть вовсе. 2. Недоверие к php как быстрому скриптовому движку. Я довольно давно программирую на пхп, приходилось ковырять немерянное количество чужих исходных кодов и писать много своих. По личному опыту могу сказать, что большинство тормозов связано с кривым кодом. К сожалению, маркетинговый ход разработчиков php (я о том, что для программирования на php не нужно быть программистом ![]() 3. PHP разрабатывался только для WEB, поэтому для других целей не годится. Это уже из области мифов. Когда заходит об этом речь, я всегда вспоминаю древнейший миф о том, что sql запрос делающий выборку из нескольких таблиц, работает медленнее, чем из извлекающий данные из одной таблицы. Да пхп разрабатывался для веб, но это было много лун назад и воды с тех пор утекло никак не меньше, чем с тех времен когда на смену файловым БД пришли СУБД ![]() Удачи. |
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: нет Всего: 36 |
можно поподробнее: - какая СУБД - характеристики сервера - сколько юзеров - каков размер траффика и какой канал |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |