За последние 24 часа нас посетили 17610 программистов и 1591 робот. Сейчас ищут 1568 программистов ...

Подкиньте идею?

Тема в разделе "Решения, алгоритмы", создана пользователем Andrey_Sergeev, 31 мар 2009.

  1. Andrey_Sergeev

    Andrey_Sergeev Активный пользователь

    С нами с:
    17 дек 2008
    Сообщения:
    8
    Симпатии:
    0
    Добрый день всем.

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

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

    (Скрипт ориентируется по временному параметру, если текущее время больше, нежели установленное, топроисходит запус этой задачи)

    Подскажите, может есть лучшие идеи поведения планировщика? То есть как бы вы написали планировщик "Повторяющихся" разнородных задач, (при заданном времени на исполнение).
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    название темы смени.

    обращаться или совращаться?
    ))
    а если всерьез - то в чем проблема-то?
    вот нежелание пользоваться русским языком мешает решать задачи самому себе. Сформулируй по-людски. что есть "мертвая задача" и чем она мешает?
     
  3. Andrey_Sergeev

    Andrey_Sergeev Активный пользователь

    С нами с:
    17 дек 2008
    Сообщения:
    8
    Симпатии:
    0
    А что здесь непонятного? Специалаьно для вас armadillo поясняю.

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

    [sql]select * from table where 'Время последующего запуска'= < 'Текущее время';[/sql]

    Это пример sql таблицы.

    HTML:
    1.     <tr>
    2.         <td>#</td>
    3.         <td>Название задачи</td>
    4.         <td>Дата последнего запуска</td>
    5.         <td>Время последующего запуска</td>
    6.     </tr>
    7.     <tr>
    8.         <td>1</td>
    9.         <td>Очистка базы</td>
    10.         <td>21-08-2009 00:01:12</td>
    11.         <td>23-08-2009 00:05:23</td>
    12.     </tr>
    13.     <tr>
    14.         <td>2</td>
    15.         <td>Сбор сведений</td>
    16.         <td>18-08-2009 10:06:12</td>
    17.         <td>19-08-2009 23:03:23</td>
    18.     </tr>
    При обработке записи должна обновляться дата следующего запуска. При чем, установка даты производится путем генерации случайного числа
    из некоторого диапазона. Эти диапазоны назначаются к каждой задаче. К задаче по очистке базы он составит от 2 до 4 дней, а
    для задачи сбор сведений от 8 часов до 24.

    После выполнения задачи скрипт обновляет поля "Дата последнего запуска" и "Время последующего запуска".

    Подобных задач может набраться очень много (в примере показаны только 2 записи) до 1000.

    За один запуск планировщика может выполнится только одна задача.

    При подобном запросе [sql]select * from table where 'Время последующего запуска'= < 'Текущее время';[/sql]
    многие задачи будут отсекаться - то есть набор будет затирать некоторые задачи. Так как даты запуска формируются случайным образом и в
    разных диапазонах.
     
  4. klerick

    klerick Guest

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

    Почему это так? Выполняйте сразу несколько задач, что мешает? Либо тогда запускайте несколько планировщиков.