Многопоточное использование аккаунтов с таблицы

Zxcoul

Client
Регистрация
02.02.2022
Сообщения
6
Благодарностей
0
Баллы
1
Добрый день! Мне необходимо в многопоточном режиме брать данные аккаунтов, производить действия с ними и возвращать значения обратно в таблицу. Возникла следующая проблема: как можно выстроить логику, чтобы данные брались без удаления, и при этом с каждым новым потоком брался следующий аккаунт с таблицы? Заранее спасибо.

P.S Скриншот с данными, необходимо брать логин и пароль с первых двух столбцов, производить операцию, записывать полученные данные в 3 столбец и возвращать значения логина и пароля обратно в столбцы.
101045
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
А чем именно не устраивает взятие с удалением?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

ZULI

Client
Регистрация
09.09.2020
Сообщения
423
Благодарностей
165
Баллы
43
сделай в базе, ставь метку что аккаунт в работе, следующий поток будет метку проверять и брать следующий аккаунт, после работы будет возвращать данные и снимать метку.

P.S. как раз рядом тема про sqlite, вполне то что нужно
 
  • Спасибо
Реакции: Alexbrush

Zxcoul

Client
Регистрация
02.02.2022
Сообщения
6
Благодарностей
0
Баллы
1

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
Нужно будет не один раз брать аккаунты, а ежедневно заходить и проявлять с них активность
Стартанул поток
Взяли с удалением строку.
Делаем своё темное дело
Вышли по красному или зеленому выходу => вернули строчку обратно в табличку.

Это гарантирует, что никакой другой поток не будет использовать тот же аккаунт одновременно.

Если нужно чтобы аккаунт брался только 1 раз в сутки - добавляем ещё ячейку время.
Взяли аккаунт-строку с удалением.
Проверили дату - если устраивает
Обновили дату в переменной
Дальше делаем свои дела. При завершении - вернули строчку обратно с новой датой.
Если не устраивает - завершаем работу по зеленой-красной - вернули аккаунт обратно с старой датой.

Если нужно чтобы за определенную дату ещё и 10 выполнений было возможно - ок.
Тогда добавляем ещё одну ячейку.
Логика та же что и с датой.
Только всегда ещё в одной ячейке обновляем счётчик на +1
А когда взяли - в начале выполнения - проверили по дате, потом если все ок - проверили по счётчику.
Если устраивает - обновили дату, обновили счётчик.
Делаем тёмное дело.
После завершения - выход по красной-зеленой.
Возвращаем строчку обратно в табличку уже с новыми данными.

Все это актуально только если корректно завершать работу зенно, не пропадает свет и тп.
В противном случае - после каждого пропадания света табличка может быть поломаной - придется восстанавливать с какой-то копии.
Из-за этого если такие варианты возможны (зенка закрывается через диспетчер, пропадание света) - используют MySQL, где реализуют подобную логику, но, в случае форс-мажора данные не теряются.

Если же принципиально нужно получать данные с таблички в многопотоке без удаления - то нужно гуглить в сторону глобальных переменных, но их использование может существенно усложнить логику, что зачастую просто избыточно.
 
  • Спасибо
Реакции: Alexbrush

Zxcoul

Client
Регистрация
02.02.2022
Сообщения
6
Благодарностей
0
Баллы
1
Стартанул поток
Взяли с удалением строку.
Делаем своё темное дело
Вышли по красному или зеленому выходу => вернули строчку обратно в табличку.

Это гарантирует, что никакой другой поток не будет использовать тот же аккаунт одновременно.

Если нужно чтобы аккаунт брался только 1 раз в сутки - добавляем ещё ячейку время.
Взяли аккаунт-строку с удалением.
Проверили дату - если устраивает
Обновили дату в переменной
Дальше делаем свои дела. При завершении - вернули строчку обратно с новой датой.
Если не устраивает - завершаем работу по зеленой-красной - вернули аккаунт обратно с старой датой.

Если нужно чтобы за определенную дату ещё и 10 выполнений было возможно - ок.
Тогда добавляем ещё одну ячейку.
Логика та же что и с датой.
Только всегда ещё в одной ячейке обновляем счётчик на +1
А когда взяли - в начале выполнения - проверили по дате, потом если все ок - проверили по счётчику.
Если устраивает - обновили дату, обновили счётчик.
Делаем тёмное дело.
После завершения - выход по красной-зеленой.
Возвращаем строчку обратно в табличку уже с новыми данными.

Все это актуально только если корректно завершать работу зенно, не пропадает свет и тп.
В противном случае - после каждого пропадания света табличка может быть поломаной - придется восстанавливать с какой-то копии.
Из-за этого если такие варианты возможны (зенка закрывается через диспетчер, пропадание света) - используют MySQL, где реализуют подобную логику, но, в случае форс-мажора данные не теряются.

Если же принципиально нужно получать данные с таблички в многопотоке без удаления - то нужно гуглить в сторону глобальных переменных, но их использование может существенно усложнить логику, что зачастую просто избыточно.
А разве в завершение потока аккаунт не встает на то же самое место, и со следующим потоком возьмется этот же аккаунт? Или вы имеете в виду, что аккаунт переписывается в новую строчку с конца таблицы? Просто задумка раз в 24 часа запускать в однопотоке софт, который условно проделает все действия со 100 аккаунтами, запишет результат в отдельный столбик в экселе, и при этом формат останется как на скриншоте?
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
А разве в завершение потока аккаунт не встает на то же самое место, и со следующим потоком возьмется этот же аккаунт? Или вы имеете в виду, что аккаунт переписывается в новую строчку с конца таблицы? Просто задумка раз в 24 часа запускать в однопотоке софт, который условно проделает все действия со 100 аккаунтами, запишет результат в отдельный столбик в экселе, и при этом формат останется как на скриншоте?
Если Вы берете всегда первую строку с удалением, то после взятия - первой станет уже вторая строка и так далее.
А добавление обратно - всегда производится в конец таблички.
Это и позволяет работать в цикле со всеми строками, с каждой в отдельном потоке.

Допустим, у Вас задача отработать в 1 поток все строки в табличке.
Ок - берете первую с удалением - отработали, вернули в конец (и добавили логин, пароль, ячейку с данными, ячейку с меткой, например датой сегодня).
Всегда когда берете - проверяете ячейку с датой - если ячейка содержит текущую дату - значит эта строчка уже сегодня работала - завершаете работу.
Таким образом, Вы всегда будете работать только с теми строчками, которые ещё сегодня не использовались.

А когда наступит завтра - то при проверке окажется что в ячейке дата сегодня и дата вчера не равны - а значит нужно выполнять работу. После выполнения работы просто обновите дату. И таким образом строка будет помечена, что она уже сегодня отработала.

Как-то так...
 

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