| |
|
|
| | У меня есть цикл IF, который выполняет один и тотже скрипт 200 раз. На каждое выполнение уходит не менее 1 секунды. Возможно ли сделать так, чтобы выполнялось сразу 200 операций за 1 секунду, ну или чуть больше ?
Я пробовал использовать include:
Но разницы никакой, к тому же тяжело создать 200 файлов вместо 1 цикла.
Можно ли в PHP сделать одновременное выполнение некоторых операций ? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(14.04.2007 в 14:05)
| | | Кстати меня тоже этот вопрос интересует=) Но помойму нельзя:( | |
| |
|
|
| |
|
|
| |
для: Poison
(14.04.2007 в 14:08)
| | | А если нельзя, то хотя бы заставить php через что-нибудь другое ... ? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(14.04.2007 в 14:05)
| | | у php нет многопотоковости, как мне известно;
include(""); - просто вставляет код в скрипт, так что это не то.
можно попробовать использовать много фреймов на странице... | |
| |
|
|
| |
|
|
| |
для: CrazyAngel
(14.04.2007 в 15:41)
| | | Можно, но вряд ли это получиться когда используешь циклы, к тому же тяжеловато сделать более 200 фреймов... хотя если постараться, то можно и так. Надо бы сделать все на одном фрейме... | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(14.04.2007 в 16:13)
| | | Может кто все-таки знает ? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(14.04.2007 в 16:13)
| | | >Можно, но вряд ли это получиться когда используешь циклы, к тому же тяжеловато сделать более 200 фреймов... хотя если постараться, то можно и так. Надо бы сделать все на одном фрейме...
Ну, чисто теоретически можно сделать вспомогательный скрипт, который будет в цикле создавать фреймы=) | |
| |
|
|
| |
|
|
| |
для: Киналь
(14.04.2007 в 20:23)
| | | exec, фоновое выполнение, символ амперсанда в конце... плюс перенаправление вывода в /dev/null ...
Всё это прекрасно работает.
цикл начался
exec("/path/to/php -f /path/to/script.php > /dev/null &");
цикл закончился
Вместо exec можно использовать любого его собрата.
Не убейте сервер. | |
| |
|
|
| |
|
|
| |
для: Shorr Kan
(14.04.2007 в 20:28)
| | | Касперский просто взбесился : )))
обнаружено: потенциально опасное ПО RootShell
Надо почитать описание семейства exec - может разберусь ) | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(14.04.2007 в 20:47)
| | | Попробовал я через запихнуть в каждый фрейм по скрипту. Создал главный файл, который все зацикливает. Ответ: при использовании фреймов выполнение все равно остается последовательным (ну по крайней мере у меня так).
Остается exec и его друзья, есле нет других вариантов.) | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(14.04.2007 в 21:15)
| | | Exec никак не пускает касперский, да и не хочется с ним связываться.
Нашел я в инете, что многопоточность можно сделать с помощью fork(), либо Perl.
Но вот только реализовать fork или Perl у меня не получается - если кто может написать скрипт многопоточности для цикла, то буду очень благодарен :_) | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(15.04.2007 в 12:12)
| | | а что вообще скрипт ваш делает?... | |
| |
|
|
| |
|
|
| |
для: KPETuH
(16.04.2007 в 08:59)
| | | Ну, к примеру мне надо сделать поиск по базе данных, в которой 10 000 ячеек.
Естественно тратится много времени на поочередное их обрабатывание.
Лучший выход - создание многопоточности, т. е. одновременное обрабатывание этих ячеек. | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 11:53)
| | | эм... помоему это проблема не php... с помощью него тут не помочь. | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 11:53)
| | | это точно не реализуемо... единственная эмуляция многопоточности на php которая мне известна это неблокирующие сокеты... вот здесь да уменьшение времени выполнеия было у меня в разы... | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 11:53)
| | | и что будет в итоге? 1000 результатов поиска? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 11:53)
| | | Реализуемо. Только объясните - причем здесь касперский? Вы не хотите делать это на сервере? | |
| |
|
|
| |
|
|
| |
для: Shorr Kan
(16.04.2007 в 12:35)
| | | 1. Это нужно делать на сервере.
2. Мне предложили использовать exec("/path/to/php -f /path/to/script.php > /dev/null &"); , запускаю скрипт... вот только антивирус не может успокоиться, пока не удалит apache.
3. Решение я вижу в использовании сокетов в perl, причем с разделением на потоки, а не на процессы, но вот только написать сам скрипт для цикла в php не могу.
Вот и сижу сейчас - почти установил perl :)
А может и без perl можно обойтись ? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 12:49)
| | | так всетаки вы ипользуете сокеты :), я вас про это и спрашивал :) ройте всторону неблокирующих сокетов и будет вам счастие, но скорее всего вам не дадут использовать такой скрипт на сервере :) | |
| |
|
|
| |
|
|
| |
для: KPETuH
(16.04.2007 в 12:59)
| | | Так в php есть сокеты ? Или нужно установить какое-то расширение ? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 13:08)
| | | конечно есть :), но сразу предупреждаю что неблокирующие сокеты с помощью которых и можно добиться эффекта мультепоточности, нагружают процессор сервера :), поэтому использовать у не проверенного хостера опасно тем что могут просто отрубить хостинг :). | |
| |
|
|
| |
|
|
| |
для: KPETuH
(16.04.2007 в 13:14)
| | | Все будет в порядке - я буду разбивать потоки на порции до 50 запросов одновременно, ну или поменьше.
Главное - написать сам скрипт, что у меня вряд ли получится. Для начала скажите - что нужно для поддержки сокетов ?_) | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 13:19)
| | | нужно чтоб хостер поддерживал сокеты... | |
| |
|
|
| |
|
|
| |
для: KPETuH
(16.04.2007 в 13:27)
| | | Я сначала хотел бы сделать это на своем компьютере - у меня установлен Apache 2 + PHP 5.
И как сделать поддержку сокетов *? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 13:19)
| | | меня заблочили за 60 запросов за 5 сек :) | |
| |
|
|
| |
|
|
| |
для: KPETuH
(16.04.2007 в 13:29)
| | | Я это учту - сначала все сделаю на локальном компьютере. | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 12:49)
| | | Если это нужно сделать на сервере - то зачем вы слушаете касперского? Или он и на сервере установлен? Какая OS ?
/path/to/php - вы его правильно написали? Путь к php указали верный? А к скрипту?
Использовать сокеты можно. Но можно и не использовать. Вариант с exec работоспособен, и выполняет то, что вам нужно - одновременная обработка многих строк. Другой вопрос в балансе нагрузки/скорости, но это подбирается. | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(14.04.2007 в 14:05)
| | | запустите скрипт с phpinfo() и посмотрите настроена ли у вас поддержка сокетов :), скоре всего должна быть.. | |
| |
|
|
| |
|
|
| |
для: KPETuH
(16.04.2007 в 13:32)
| | | я когда начал копаться в этом деле использовал для написания вот такой вот пример
http://www.stableversion.com/2006/04/17/multithread-php/ | |
| |
|
|
| |
|
|
| |
для: KPETuH
(16.04.2007 в 13:35)
| | | А я здесь когда-то был )))
Нашел следуещие строки со словом "socket":
1 Registered Stream Socket Transports tcp, udp
2 mysql.default_socket no value no value
3 default_socket_timeout 60 60
Я так понял что в первой строке - работа сокетов с TCP/IP и UDP(вроде это локальный доступ или что-то подобное). | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 13:39)
| | | 2Shorr Kan:
возможно я действительно ошибся в написании )
можете написать скрипт с приблизительным путем к php как он должен быть для Windows XP на C:/php5/ | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 13:39)
| | | И еще - как именно указывать путь к скрипту, и если exec расположен в самом скрипте, то путь к нему же ? exec("/path/to/php -f /path/to/script.php > /dev/null &"); - одновременно выполняет все строки в файле (тоесть нужно создавать файл с exec и файл с необходимыми операциями)? | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(16.04.2007 в 15:20)
| | | А курлом можно так сделать? Если да, то какую опцию добавить? | |
| |
|
|
| |
|
|
| |
для: User
(16.04.2007 в 19:59)
| | | Узнал с помощью гугла, что это можно делать с помощью функций curl_multi_*
Но это относительно новые функции, и на русском очень мало информации. Даже на php.net нет точных описаний. Может, кто нибудь имел дело с этими функциями и даст пример их использования? | |
| |
|
|
| |
|
|
| |
для: User
(16.04.2007 в 22:02)
| | | Давайте по-порядку:
exec();
exec("/path/to/php -f /path/to/script.php > /dev/null &");
Я спользую её так:
exec ("c:/php5/ -f index.php > /dev/null &");
Антивирус блокирует этот скрипт - кто может объяснить что сделать?
(может не правильное написание, не та OS, не тот антивирус, или это вообще нет то?)...
Неблокируемые сокеты в php - с этим я сталкиваюсь впервые,
хорошей документации не нашел, к тому же не знаю как установить их для php
объясните кто знает...
curl_multi_* - курлы обычные работают, все настроил,
но это я так понимаю только для TCP/IP,
да и не нашел я документации к curl_multi_*
и с ними почему-то не работает curl_setopt,
хотя может это только у меня так получается.
И все же напишите кто в курле пашет, про curl_multi_* |_)
Если вы знаете другие способы многопоточности (fork(); thread(); и т.п.)
то напишите сюда... :) | |
| |
|
|
| |
|
|
| |
для: RajaxteN
(17.04.2007 в 15:11)
| | | ссылку по неблокирующим сокетам давал выше, пример по ссылке очень неплох, просто нужно посидеть и подумать и разобраться... | |
| |
|
|