очередь задач

Практические советы по работе с FileMaker, типичные задачи и их решения. У вас вопрос? Пишите сюда.
Ответить
andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

очередь задач

Сообщение andrey volkov » 08 апр 2019, 05:51

Дано: ФМСервер и приложение, которое на нем крутится. Для n пользователей
В пользовательских сценариях есть и такие, которые выполняются на сервере (PSOS). Файлмейкер так устроен, что такие сценарии на сервере запускаются в отдельных сессиях параллельно.
Но
Один из сценариев требует, чтобы он исполнялся сервером строго последовательно, один за другим, даже если два пользователя вызовут его одновременно. То есть нужна некая организация очереди.
Возможно, у кого-то уже есть проверенные отработанные методы организации очереди или соображения. Просьба описать схематически.

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: очередь задач

Сообщение Alexei Sytch » 08 апр 2019, 20:39

Андрей, можно создать запись в таблице "Очередь" ( название скрипта для запуска, параметры, дата и время создания).
На сервере запускается по расписанию "управляющий скрипт", который циклом обходит все записи в этой таблице в порядке создания и запускает скрипты по названию

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: очередь задач

Сообщение andrey volkov » 09 апр 2019, 06:33

Алексей, спасибо за отклик
Все сложнее и интереснее.
Необходим не вариант с серверным сценарием (schedula). Нужна возможность запустить скрипт на сервере моментально (PSOS). Но требуется, чтобы он, скрипт, не наложился на другой подобный, а ждал в таком случае своей очереди. Возможно, кто-то уже и делал такое. На грабли наступать не хочется

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: очередь задач

Сообщение andrey volkov » 11 апр 2019, 07:17

собственно варианты могут быть какими. Понятно, что нужно опознать, выполняется ли скрипт уже на сервере в другой сессии. сделать это не сложно. Вопрос в том, что делать в случае, если обнаружено, что выполняется параллельный процесс.
1) записать задачу в таблицу "очередь" и выйти. Предоставить скрипту, который уже "трудится" завершить все задачи.
2) ожидать, пока другой скрипт закончит работу и приступить к выполнении своей задачи.

Все не так просто. в каждом варианте есть плюсы и минусы

Ответить