1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
1

Как правильно организовать алгоритм по работе с Заданиями?

27.07.2015, 07:55. Показов 750. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день,

А существует ли в природе Таскер(выполнение задач), но работающей как бы не совсем на основе Крона, а с помощью одного пхп файла и базы данных MySQL?
Допустим, Крон дёргает пхп файл раз в 1 минуту (это понятно как сделать), а этот пхп файл проверяет базу данных на предмет Заданий, и далее сам этот же скрипт их выполняет. Т.е. скриптом из базы данных просто берутся нужные параметры для выполнения Задания.

С одной стороны вроде бы не сложно, с другой не совсем ясно как. К тому же, если допустим у нас будет 60 заданий, и все они будут выполняться по очереди, то задание будет выполняться 1 раз каждый час, т.к. будет идти очередь. Это очень долго.

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

Как это делать правильнее? Или быть может есть готовые таскеры?

Добавлено через 7 минут
да... смысл чтобы после завершения последнего Задания, цикл начинался снова с 1-го Задания.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2015, 07:55
Ответы с готовыми решениями:

Как правильно организовать класс по работе с БД
Здравствуйте. У меня есть проект каталогизатора. Изначально писал основываясь на MSSQL CE. Потом...

Как правильно организовать алгоритм вычисления переменных
Помогите, пожалуйста, правильно организовать алгоритм вычисления переменных. Имеется функция...

Как правильно организовать БД?
Есть база данных о предприятии. В ней есть данные об отделах и о сотрудниках. С сотрудниками всё...

Как правильно организовать БД?
Извините за глупый, наверное, вопрос. Я самоучка и только начинаю познавать науку... Как...

12
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
27.07.2015, 10:34 2
Цитата Сообщение от AlexSokolov Посмотреть сообщение
Добрый день,
А существует ли в природе Таскер(выполнение задач), но работающей как бы не совсем на основе Крона, а с помощью одного пхп файла и базы данных MySQL?
Допустим, Крон дёргает пхп файл раз в 1 минуту (это понятно как сделать), а этот пхп файл проверяет базу данных на предмет Заданий, и далее сам этот же скрипт их выполняет. Т.е. скриптом из базы данных просто берутся нужные параметры для выполнения Задания.
С одной стороны вроде бы не сложно, с другой не совсем ясно как. К тому же, если допустим у нас будет 60 заданий, и все они будут выполняться по очереди, то задание будет выполняться 1 раз каждый час, т.к. будет идти очередь. Это очень долго.
Если же для сокращения времени, брать на выполнение сразу несколько заданий по такому принципу, то по идее может лечь хостинг/сервер или скрипт просто не отработает.
Как это делать правильнее? Или быть может есть готовые таскеры?
Добавлено через 7 минут
да... смысл чтобы после завершения последнего Задания, цикл начинался снова с 1-го Задания.
Добрый день, создать такой "Таскер(выполнение задач)" можно даже без особых проблем, суть такова - каждый час крон запускает php скрипт он же в свою очередь первым делом проверяет по базе задания узнаёт их кол-во и выполняет в цикле, только нужно будет написать правильный алгоритм выполнения задания и тогда будет все отлично!
1
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
27.07.2015, 10:45  [ТС] 3
Raider_, Минус предложенного мной алгоритма, что если Заданий например 60, то выполнить все сразу в цикле, возможно просто не даст хостинг/сервер. Так как скрипт будет работать долго, а во вторых будет нагрузка на процессор.
А если выполнять по очереди(раз в минуту одно задание), то будет слишком долго выполнять 60 заданий, по очереди – делать каждое раз в минуту, это целый час на обход всех 60-ти заданий, а если их 120??
В итоге мы получим, что задание выполняется раз в час (если их 60, и раз аж в два часа, если их 120)! А хотелось бы раз в 5 минут или 10.
Тут наверно подход многопоточности нужен.

Добавлено через 2 минуты
Цитата Сообщение от Raider_ Посмотреть сообщение
суть такова - каждый час крон запускает php
дело в том, что хотелось бы выполнять каждое задание раз в 5 - 10 минут.
0
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
27.07.2015, 10:51 4
Цитата Сообщение от AlexSokolov Посмотреть сообщение
Тут наверно подход многопоточности нужен.
тогда в таком случии нужно несколько файлов обработчиков один запускаться каждые 5 минут другой каждые 7 чтоб конфликтов не было (это самый простой способ) а задания чтоб допустим не все сразу выполнялись а только часть просто общее кол-во делим допустим на 2,4,5,6 и т.д это уже логика и тут надо просчитывать все
1
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
27.07.2015, 10:52  [ТС] 5
Цитата Сообщение от Raider_ Посмотреть сообщение
проверяет по базе задания узнаёт их кол-во и выполняет в цикле
сразу? если Заданий 80. Каждое может выполняться по 5 секунд максимум. Это 400 секунд = 6 минут. Какой хостинг даст так работать? При том, что если они еще ресурсоёмкие, то нагрузка на процессор же.
0
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
27.07.2015, 11:05 6
Цитата Сообщение от AlexSokolov Посмотреть сообщение
Каждое может выполняться по 5 секунд максимум. Это 400 секунд = 6 минут
Ну в такой ситуации сложно найти компромисс! Тут нужно чем то жертвовать что бы добиться успеха то есть:
Минимальная нагрузка на сервер - малая скорость выполнения
Быстрая скорость обработки и выполнения - большая нагрузка на сервер
Нужно найти что то среднее а для это нужно из общего числа заданий брать определенное кол-во чтоб быстро выполнить и не нагрузить
1
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
27.07.2015, 11:11  [ТС] 7
Raider а чтоб именно каждые 5 минут, так получается вообще никак не продумать?
Просто, если у нас 80 Заданий, с каждым проходом выполняем по 10.
Это 8 файлов-обработчиков:
1-ый каждые 5 минут
2-ой каждые 6 минут
3-ий – 7
4-ый – 8
5-ый – 9
6 –ой -10
7-ой - 11
8-ой – 12

каждые 6 минут и 12 минут, они ж пересекутся тогда.

А если брать только чётные и не чётные, то получается за раз надо брать больше заданий, а не 10. А больше заданий, опять упрёмся во время выполнения скрипта.
0
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
27.07.2015, 11:20 8
Цитата Сообщение от AlexSokolov Посмотреть сообщение
каждые 6 минут и 12 минут, они ж пересекутся тогда.
смотри можно сделать так то что когда добавляются задания в бд у них есть поле допустим "num_obr" номер обработчика который должен выполнить это задания и все тогда пусть все 15 обработчиков в раз запустятся то конфликта не будет каждый выполнит своё

Добавлено через 2 минуты
так же можно после того как обработчик взял задание чтоб он помечал его в бд то что взял и выполнит он! Но это скользкая дорожка могут быть конфликты
1
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
27.07.2015, 11:26  [ТС] 9
Цитата Сообщение от Raider_ Посмотреть сообщение
Но это скользкая дорожка
думал такой вариант тоже, но как раз если они сразу все запустятся, то да, могут быть накладки.

в принципе, у меня был вариант еще брать все задания разом! и как говоришь, выполнять в цикле, но после каждого Задания помечать в БД, что это Задание выполнено.
А если скрипт прервал свою работу по какой-то причине, то предпоследнее задание-то он успел записать что оно выполнено. И второй старт скрипта возьмёт опять ВСЕ задания, за исключением тех, которые с пометкой "выполнено".
Вроде ничего?

Хотя я лазил как-то по коду какого-то Фреймворка, где похожие Кроновские дела реализовывались многопоточностью, и какая-то там была реализация на Cron Threaded процессах.
1
23 / 23 / 6
Регистрация: 22.02.2015
Сообщений: 68
27.07.2015, 11:39 10
Цитата Сообщение от AlexSokolov Посмотреть сообщение
Фреймворка
С ними я не работал и не хочу почему то мне они не нравятся!
Цитата Сообщение от AlexSokolov Посмотреть сообщение
за исключением тех, которые с пометкой "выполнено".
да все верно так будет отлично

Добавлено через 6 минут
не а смотри заданий та все равно допустим 120, их так же по чуть чуть выполнять нужно не все сразу!
1
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
27.07.2015, 11:41  [ТС] 11
Цитата Сообщение от Raider_ Посмотреть сообщение
их так же по чуть чуть выполнять нужно не все сразу
да нет, они не связаны друг с другом, если они выполнятся все сразу это даже хорошо, только вот хостер не даст выполнить всё сразу скорее всего, не понравится ему такая нагрузка и время работы скрипта
0
> /dev/null
286 / 119 / 86
Регистрация: 14.05.2014
Сообщений: 767
27.07.2015, 12:22 12
AlexSokolov, а не легче уже тогда купить VPS и настроить там веб сервер? Сейчас есть очень выгодные тарифы и по цене выйдет как за хостинг.
1
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 34
27.07.2015, 12:58  [ТС] 13
bleef159 безопасность не та, надо быть очень админом, линуксы юниксы и т.д.
Был опыт года 3 назад, c самым не дорогим хостингом, который давал впс, но там слишком жестко давили ресурсы, сервер еле жил, будучи не имея никакой по сути нагрузки. Может конечно уже обстановка поменялась.
А так да.
Просто сама логика не совсем ясна, какая будет прям наиболее оптимальна.
И как я видел по коду других людей, всё это делали через процессы Крона, псевдомультипоточность и т.д., как-то там всё не просто было.
Но там были более объёмные дела, выполнение 10 000 заданий например.
0
27.07.2015, 12:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2015, 12:58
Помогаю со студенческими работами здесь

Как правильно организовать?
У меня есть несколько классов и у них практически одинаковые функции, которые отличается парой...

Как правильно организовать событие
Добрый день. Подскажите пожалуйста, как правильно организовать событие. Существует основной...

Как правильно организовать магазин
Как правильно организовать магазин. 1. У магазина меню многоуровневое до 5 уровней вложености 2....

Как организовать правильно запрос
Доброго всем. Никак не могу понять, как ЭТО сделать... Есть таблица, есть форма с запросом. Идет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru