- Регистрация
- 25.10.2016
- Сообщения
- 67
- Благодарностей
- 2
- Баллы
- 8
Здравствуйте , мне нужно запустить шаблон по расписанию, в несколько потоков (10 потоков). Сам шаблон выполняет функцию get запроса из API и если там появились новые, не обработанные элементы, он их начинает обрабатывать и в конце меняет статус элемента с Новый на Выполнен (обработка одного элемента может занимать до 30 минут).
Если запустить многопоток (10 потоков) + расписание, с интервалом 1 минута - будут каждую минуту запускаться 10 потоков, если API в эту какую-то минуту выдаст 3 элемента, то все 10 потоков, каждый возьмет по 3 новых элемента и будут их одновременно выполнять - а должны выполнять по очереди 1ый поток = 1ый элемент, 2ой поток = 2ой элемент, 3ий поток = 3ий элемент, 4-10 - заканчивают проверку, потому как не найдено новых элементов, для них не найдено .
Единственное решение для такой ситуации было найдено : после взятия потоком нового элемента в обработку, сразу менять статус на выполнен, что бы другие потоки их не подхватывали повторно. Но как заставить потоки запускаться по очереди - понять никак не могу? Например: я выставил паузу в 20 секунд, далее первый шаблон успел гетнуть и запостить измененный статус, и потом все последующие потоки не видели предыдущий элемент как требуемый к обработке.
Если запустить многопоток (10 потоков) + расписание, с интервалом 1 минута - будут каждую минуту запускаться 10 потоков, если API в эту какую-то минуту выдаст 3 элемента, то все 10 потоков, каждый возьмет по 3 новых элемента и будут их одновременно выполнять - а должны выполнять по очереди 1ый поток = 1ый элемент, 2ой поток = 2ой элемент, 3ий поток = 3ий элемент, 4-10 - заканчивают проверку, потому как не найдено новых элементов, для них не найдено .
Единственное решение для такой ситуации было найдено : после взятия потоком нового элемента в обработку, сразу менять статус на выполнен, что бы другие потоки их не подхватывали повторно. Но как заставить потоки запускаться по очереди - понять никак не могу? Например: я выставил паузу в 20 секунд, далее первый шаблон успел гетнуть и запостить измененный статус, и потом все последующие потоки не видели предыдущий элемент как требуемый к обработке.