Перезагрузка сервера. Проблема с пустым списком.

Voldemar

Client
Регистрация
13.04.2014
Сообщения
478
Благодарностей
56
Баллы
28
Доброго времени суток!

У меня проект работает в многопоточном режиме.

Условно 60 потоков, в txt файле лежит 60 ссылок скажем так. Каждый поток берет по одной строке себе и если вылетает bad end то просто кладёт его обратно в список. (сам шаблон зациклен). Проблема заключается в том, что если сервер неожиданно уйдёт в ребут или ЗП перезапуститься тоже резко, то bad end не выполниться и список будет пустой, соответственно при автозапуске зенно (после перезагрузки), проект не начнет выполняться корректно, т.к. список будет пустой.

Какое решение можно сделать в данном случае?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Идея для проблемы после ребута:
Надо сделать резервную копию списка типа "Список2.txt". И закинуть в автозагрузку Windows батник, который будет копировать его содержимое в ваш рабочий список после каждого старта сервера (пофиг после сбоя или просто так). Зенка же не сразу запускается, и батник успеет свое отработать. Как организовать это все уже гуглите.
 

Sho

Активный пользователь
Регистрация
08.08.2022
Сообщения
100
Благодарностей
51
Баллы
28
Доброго времени суток!

У меня проект работает в многопоточном режиме.

Условно 60 потоков, в txt файле лежит 60 ссылок скажем так. Каждый поток берет по одной строке себе и если вылетает bad end то просто кладёт его обратно в список. (сам шаблон зациклен). Проблема заключается в том, что если сервер неожиданно уйдёт в ребут или ЗП перезапуститься тоже резко, то bad end не выполниться и список будет пустой, соответственно при автозапуске зенно (после перезагрузки), проект не начнет выполняться корректно, т.к. список будет пустой.

Какое решение можно сделать в данном случае?
Или можно просто брать из списка без удаления. В конце, если удачно отработал шаблон, то найти строку в списке и удалить.
 
  • Спасибо
Реакции: djaga

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Или можно просто брать из списка без удаления. В конце, если удачно отработал шаблон, то найти строку в списке и удалить.
Тогда соседние потоки возьмут одну и ту же строку. Может можно сделать счетчик через костыль с глобальными переменными, чтобы каждый новый поток брал на одну троку ниже, но со списком у ТС надежнее схема.
 

Sho

Активный пользователь
Регистрация
08.08.2022
Сообщения
100
Благодарностей
51
Баллы
28
Тогда соседние потоки возьмут одну и ту же строку. Может можно сделать счетчик через костыль с глобальными переменными, чтобы каждый новый поток брал на одну троку ниже, но со списком у ТС надежнее схема.
Я писал про кубик, так как он залочит список на поток. Но если так критично, можно самому написать лок и не дать всем потокам так беспорядочно себя вести.

Плюс есть три глобальных лока. Один из них как раз для всех списков в ZP.
 

Voldemar

Client
Регистрация
13.04.2014
Сообщения
478
Благодарностей
56
Баллы
28
Или можно просто брать из списка без удаления. В конце, если удачно отработал шаблон, то найти строку в списке и удалить.
А зачем мне удалять из списка? Если у меня шаблон циклично 24/7 работает.
Можно конечно придумать что-то через глобальные переменные, но со списком, как то надежно.
 

Sho

Активный пользователь
Регистрация
08.08.2022
Сообщения
100
Благодарностей
51
Баллы
28
А зачем мне удалять из списка? Если у меня шаблон циклично 24/7 работает.
Можно конечно придумать что-то через глобальные переменные, но со списком, как то надежно.
Можно не удалять, тогда список пустым не будет даже после ребута.)
Только тогда не понятно, в чем тогда вопрос если не в удалении строк при взятии?

Вот ещё несколько вариантов:
1. Возможно после взятия перемещать в конец списка.
2. Можно создавать временный список и сверять с основным списком.
 
  • Спасибо
Реакции: djaga

Voldemar

Client
Регистрация
13.04.2014
Сообщения
478
Благодарностей
56
Баллы
28
Можно не удалять, тогда список пустым не будет даже после ребута.)
Только тогда не понятно, в чем тогда вопрос если не в удалении строк при взятии?

Вот ещё несколько вариантов:
1. Возможно после взятия перемещать в конец списка.
2. Можно создавать временный список и сверять с основным списком.
Условно я запустил 100 поток на шаблон.
99 запустилось нормально, 1 нет (сработал bad end). Кладём ссылку обратно в список (она там будет одна соответственно), добавляем попытку к выполнению проекта.

А как выглядит реализация ликирования списка, через глобальные переменные если делать?
 

Sho

Активный пользователь
Регистрация
08.08.2022
Сообщения
100
Благодарностей
51
Баллы
28
Условно я запустил 100 поток на шаблон.
99 запустилось нормально, 1 нет (сработал bad end). Кладём ссылку обратно в список (она там будет одна соответственно), добавляем попытку к выполнению проекта.

А как выглядит реализация ликирования списка, через глобальные переменные если делать?
Мы как бы об одном говорим, но друг друга не понимаем...

Написал же, при взятии из списка кубиком должен сработать лок на поток. Строку можно переместить во временный список или просто в конец списка.

У вас проблема происходит именно из-за удаления при взятии из списка. Решение на поверхности: не удаляйте или резервируйте при взятии. Тогда, когда что-то упадёт, не нужно будет что-то резервировать или восстанавливать после badend.

А как выглядит реализация ликирования списка, через глобальные переменные если делать?
Глобальную переменную предложили как счётчик (1,2,3 и т.д.) и без удаления из списка. Взяли, прибавили +1, взяли под номером 2 и т.д. Но если перезагрузится ZP, то глобальная переменная удалится.

Глобальные локи это другое. Это то, что не даёт потокам брать одну и туже строчку. Если у вас такого сейчас нет, значит вы используйте кубики. Я прав?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Можете помечать строчки как используемые, а при старте шаблона сбрасывать эти метки.
Ещё вариант - использовать базы данных.
 
  • Спасибо
Реакции: Sho

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)