Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Есть база данных. В ней хранятся все данные (сайты), которые нужны будут для обработки, и в нее же и записываются результаты обработки.

Сайтов 20 000.

Есть N функций, которые должны делаться каждые M минут с данными сайтами.

Функции – это вызов сайта по curl и передача ему некоторых параметров + анализ результатов. Параметры разные для каждой функции.

Пример:

- A+b должно делаться каждые 10 минут с момента последней операции этой функции по конкретному сайту. И результат в базу

- C*d должно делаться каждые 60 минут с момента последней операции этой функции по конкретному сайту. И результат в базу

-A\d должно делаться каждые 15 минут с момента последней операции этой функции по конкретному сайту. И результаты в базу

Т.е. функции разные и интервалы разные. Нужно как-то в «главном» скрипте предусмотреть добавление новых функций. Т.е. потенциально могут быть добавлены еще функции над данными сайтами.

Мы не знаем сколько времени уйдет на работу той или иной функции. Она может завершится за секунду, а может и за 10 минут. Поэтому запускать скрипты с функциями по крону – не выход. Если скрипт выполняется 1 секунду, то ждать до следующего запуска – терять время, и наоборот, если скрипт продолжает еще выполняться, а по крону запускаете его вторая копия, то будут ошибки. Да и вряд ли она запустится, пока не завершится первая…

Задача: нужно в постоянном режиме выполнять эти функции над сайтами из базы. Причем, чтобы все функции работали одновременно (результаты выполнения друг от друга не зависят и не влияют на выполнение других функций). Желательно, каждую функцию выполнять в поточном режиме (до 10 потоков).

Интервал M задается в самой функции в выборке из базы, например SELECT * FROM table WHERE date1

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

Нужно предусмотреть автозапуск, чтобы в случае остановки – вся «система» запускалась автоматически. Думаю по крону проверка каждую минуту и запуск в случае, если не работает.

Нужно так же предусмотреть корректную ручную остановку «системы», т.е. может в некий файл писать флаг 1/0. И чтобы «система» постоянно мониторила этот файл (скажем, раз в минуту). В случае если там 1 – работаем. Как только там 0 – система завершает все текущие функции и останавливается полностью. При автозапуске так же обращать внимание на этот флаг – если 1 – запускаемся, 0 – нет.

Так же, нужно учитывать еще один флаг настройки – есть или нет интернет. Так же в другом файле флаг 1/0. Если 0 – интернета нет, работать не нужно, если 1 – все в порядке, работаем.

Наличие интернета будет проверяться другим скриптом и писаться в этот файл нужный флаг.

Это нужно сделать в виде функции и запускать ее внутри каждой функции над сайтами – если 0 – работаем, если 1 – прекращаем работу функции сразу.

Есть еще одна функция, которая так же выполняется постоянно, она мониторит, когда в определенной таблице появляется задание на отправку писем и выполняет их. Желательно так же в многопоточном режиме. Т.е. сделали выборку, у нас, допустим, 100 писем нужно отправить. И есть функция отправки письма. Нужно наверное тоже в многопоточном режиме, чтобы не в цикле 100 раз, а, скажем, 10 раз по 10.

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

Знаю, что такое проще сделать например на С. Но нужно на PHP ))

От Вас комментарии (можно\нельзя, может как-то по другому), цена и сроки.

11 лет назад
Defin
41 год
19 лет в сервисе
Была
8 лет назад

Заявки фрилансеров

Нет заявок фрилансеров