Запуск 30 php-скриптов одновременно в фоновом режиме - PullRequest
0 голосов
/ 28 ноября 2009

У меня есть PHP-скрипт, который должен запускаться 30 параллельных раз каждый с различным аргументом. Каков наилучший способ сделать это, чтобы каждый сценарий мог иметь как можно более равномерное воздействие на процессор?

Ответы [ 5 ]

2 голосов
/ 28 ноября 2009

Описание проблемы

Как и некоторые другие пользователи (я тоже), вы должны дать немного больше объяснений (возможно, примеры кода). Например, должны ли эти задачи выполняться постоянно или только один раз при вызове php-скрипта?

очередь сообщений

Прежде всего, я думаю, что если возможно, следует избегать одновременного запуска стольких задач, но планировать (быть осторожными для ПК) их с помощью очереди сообщений, например, beanstalkd

PHP-решение

Я не думаю, что PHP - подходящий инструмент для вашей проблемы из-за модели потоков (нет). Потоки легки, а создание новых процессов тяжело. Вы могли бы сделать это, как объясняет стронций. Мое мнение таково, что запуск этого кода на общем хосте не будет оценен, потому что, если все пользователи будут запускать долго выполняющиеся процессы, они будут чрезмерно использовать (использовать слишком много ПК) сервер.

Квота из нетто

Нет лучшего источника, чем создатель PHP, который знает, на что способен PHP. Расмус Лердорф создал PHP в 1995 году, и с тех пор язык распространился, как лесной пожар, в сообществе разработчиков, изменив облик Интернета. Однако Расмус не создавал PHP с таким намерением. PHP был создан для решения проблем веб-разработки.

Однако вы не можете использовать PHP для всего. Лердорф первым признает, что PHP на самом деле просто инструмент в вашем наборе инструментов, и что даже PHP имеет ограничения.

Лучший язык

Как я уже говорил ранее, я не думаю, что PHP - это правильный инструмент. Некоторые языки, которые, я думаю, могли бы решить проблему лучше:

  • Java
  • питон
  • C

Конечно, гораздо больше языков, которые поддерживают потоковую модель, являются подходящим инструментом для работы, но PHP изначально не предназначен для таких задач, как эта. Даже создатель PHP Расмус подтверждает это. Вы можете прочитать об этом в этом списке из nettuts , который, я думаю, имеет несколько неплохих моментов.

Google app engine

В заключение я бы посоветовал вам взглянуть на taskqueu api из google app engine . Потому что это тоже очень хороший вариант;). Я мог бы даже считать это лучшим вариантом. у вас есть бесплатная смета, и расходы будут справедливыми, если вы превысите смету. Очередь задач использует webhooks, чтобы хуки могли быть закодированы в PHP.

1 голос
/ 28 ноября 2009

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

Если вы используете UNIX-подобную операционную систему, вы можете попробовать использовать команду nice, чтобы настроить процессы, которые, по вашему прогнозу, будут иметь больший доступ к диску / сети / базе данных, но я не думаю, что вы увидите какой-либо ускорить.

Если все процессы будут обрабатывать одинаковое количество операций ввода-вывода, вам, вероятно, лучше просто позволить планировщику ядра выполнять свою работу.

Немного больше информации о том, что фактически выполняет ваша работа, было бы чрезвычайно полезно.

1 голос
/ 28 ноября 2009

Сам PHP не поддерживает потоки. Но вы можете просто запустить несколько копий своего скрипта одновременно, используя popen () или proc_open (). Иногда для этой цели используется multicurl (когда ограничены popen и alikes).

0 голосов
/ 28 ноября 2009

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

0 голосов
/ 28 ноября 2009

Если вы запустите этот CLI, вы можете разветвить 29-30 дочерних процессов и запустить там код. У вас может быть один основной процесс с открытыми сокетами для каждого дочернего элемента или последовательная связь их, если вы хотите. В большинстве случаев вам следует надеяться, что ядро ​​сбалансирует процессы, если они имеют одинаковый приоритет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...