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

  • Автор темы Автор темы Voldemar
  • Дата начала Дата начала

Voldemar

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

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

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

Какое решение можно сделать в данном случае?
 
Идея для проблемы после ребута:
Надо сделать резервную копию списка типа "Список2.txt". И закинуть в автозагрузку Windows батник, который будет копировать его содержимое в ваш рабочий список после каждого старта сервера (пофиг после сбоя или просто так). Зенка же не сразу запускается, и батник успеет свое отработать. Как организовать это все уже гуглите.
 
Доброго времени суток!

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

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

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

Или можно просто брать из списка без удаления. В конце, если удачно отработал шаблон, то найти строку в списке и удалить.
 
  • Оценить
Реакции: djaga
Или можно просто брать из списка без удаления. В конце, если удачно отработал шаблон, то найти строку в списке и удалить.
Тогда соседние потоки возьмут одну и ту же строку. Может можно сделать счетчик через костыль с глобальными переменными, чтобы каждый новый поток брал на одну троку ниже, но со списком у ТС надежнее схема.
 
Тогда соседние потоки возьмут одну и ту же строку. Может можно сделать счетчик через костыль с глобальными переменными, чтобы каждый новый поток брал на одну троку ниже, но со списком у ТС надежнее схема.
Я писал про кубик, так как он залочит список на поток. Но если так критично, можно самому написать лок и не дать всем потокам так беспорядочно себя вести.

Плюс есть три глобальных лока. Один из них как раз для всех списков в ZP.
 
Или можно просто брать из списка без удаления. В конце, если удачно отработал шаблон, то найти строку в списке и удалить.
А зачем мне удалять из списка? Если у меня шаблон циклично 24/7 работает.
Можно конечно придумать что-то через глобальные переменные, но со списком, как то надежно.
 
А зачем мне удалять из списка? Если у меня шаблон циклично 24/7 работает.
Можно конечно придумать что-то через глобальные переменные, но со списком, как то надежно.
Можно не удалять, тогда список пустым не будет даже после ребута.)
Только тогда не понятно, в чем тогда вопрос если не в удалении строк при взятии?

Вот ещё несколько вариантов:
1. Возможно после взятия перемещать в конец списка.
2. Можно создавать временный список и сверять с основным списком.
 
  • Оценить
Реакции: djaga
Можно не удалять, тогда список пустым не будет даже после ребута.)
Только тогда не понятно, в чем тогда вопрос если не в удалении строк при взятии?

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

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

А как выглядит реализация ликирования списка, через глобальные переменные если делать?
 
Условно я запустил 100 поток на шаблон.
99 запустилось нормально, 1 нет (сработал bad end). Кладём ссылку обратно в список (она там будет одна соответственно), добавляем попытку к выполнению проекта.

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

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

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

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

Глобальные локи это другое. Это то, что не даёт потокам брать одну и туже строчку. Если у вас такого сейчас нет, значит вы используйте кубики. Я прав?
 
Можете помечать строчки как используемые, а при старте шаблона сбрасывать эти метки.
Ещё вариант - использовать базы данных.
 
  • Оценить
Реакции: Sho

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