Автор Тема: как организовать многопоточность (другого слова не смог выдумать)  (Прочитано 5225 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн obytatel

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 129
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.microsoft.com/
как организовать многопоточность (другого слова не смог выдумать)
Проблема:
Ныне мой скрипт ПОСЛЕДОВАТЕЛЬНО открывает соединения с удаленными хостами и производит однородные действия. То есть: отработал с одним хостом - взялся за другой.
Нужно:
Чтобы скрипт ОДНОВРЕМЕННО работал с несколькими хостами (5-10), т.е. более плотно использовал канал.
Вот и вся трабла. Если можно - киньте пример кода.
:insane:
БЕЛАРУСЬ - страна восходящего картофеля

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
ИМХО тут лучше взять Perl или Python

Если на php - то я пока вижу 2 варианта
 - register_tick_function (не советую)
 - pcntl_* (управление процессами - не работал)

Вроде неблокирующие сокеты могут помочь, но я их не юзал.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Как альтернатива, можно клиентом (просто браузером) запустить несколько скриптов с set_time_limit(0) и ignore_user_abort(true).
Сходи вот сюда:
http://www.php.net/ignore_user_abort
И не забудь почитать комментсы!
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн D1g174LM4n14c

  • 1m
  • Постоялец
  • ***
  • Сообщений: 137
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
А лимит сервера на выполнение скриптов? PHP скрипт все равно не сможет выполняться НЕОГРАНИЧЕННОЕ количество времени... только если на сервере ограничения не установлены... а обычно так не делают...
Мы такие!

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
D1g174LM4n14c
[off] нужно хостинг выбирать под задачу. Если ему нужен скрипт без ограничения времени исполнения, значит нужно выбирать подходящего хостера [/off]
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
obytatel
Я это делал средствами UNIX\'a.
Т.е. в теле скрипта команда `php myscript.php &`, но это работает только если он ничего не вводит и ничего не выводит. Обычно такой скрипт может выполняться секунд 15
TANSTAAFL

Оффлайн D1g174LM4n14c

  • 1m
  • Постоялец
  • ***
  • Сообщений: 137
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Макс
[OFF]
не каждого сисадмина уговоришь лимит убрать...
а вдруг ты рассылкой спама заниматься будешь? =)
[/OFF]
Мы такие!

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
D1g174LM4n14c
[off]Ну любой нормальный сисадмин по логам отличит рассылку спама от другой, более (без)обидной деятельности ;)[/off]
А вообще я предложил такой способ просто как альтернативу...
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн obytatel

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 129
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.microsoft.com/
а вариантов с вызовом функций или модулей без ожидания возврата результатов нет?
БЕЛАРУСЬ - страна восходящего картофеля

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Насколько я знаю, нет.
Хотя можешь попробовать запихнуть функцию в отдельный файл, а потом вызывать его вот так:
$addr $HTTP_SERVER_VARS[\'SERVER_ADDR\'];
$port = $HTTP_SERVER_VARS[\'SERVER_PORT\'];
$script_path = "/functions/some_mail_func.php";
$params = "?from=My+Name&to=My+Client";
$fp = fsockopen ($addr, $port, $errno, $errstr, 30);
if (!$fp)
	
die("$errstr ($errno)
\\n");

$headers = "GET $script_path HTTP/1.0\\r\\n".
	
"Host: ". $addr . $params ."\\r\\n\\r\\n";
fputs ($fp, $headers);
// Сюда можно вставить код получения ответа от сервера!
fclose ($fp);

Ну и ещё можно запихнуть это в цикл и вызывать эту функцию несколько раз не дожидаясь ответа от сервера.
А файл по $script_path пусть пишет все ошибки/результаты в лог, который потом можно будет посмотреть.
Хотя по-моему это всё-же извращение...
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
а вариантов с вызовом функций или модулей без ожидания возврата результатов нет?
попробуй это
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
вот кстати еще есть http://cvs.php.net/cvs.php/pear/PECL/threads
Только ни один админ на рабочий сервер это не поставит
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 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