Всем спасибо! shift+enter ГУД!
Что касается веб версии я писал это в первом сообщении, но то такое.
Рассылка по единому списку в многопотоке без повторений
-
@Antonio у меня задача рассылать без повторов.
Вначале каждый поток парсит страницу на онлайн в список (у каждого потока свой список но на 99% что он будет одинаковый) , далее у меня есть txt файл с игнор списком, из тех, по кому уже сделали рассылку и который постоянно дописывается.
Я беру строку из списка и прогоняю её по txt встречается она там или нет, если нет, то беру строку и делаю рассылку. Как сделал рассылку дописываю её в txt.
Но проблема в том, что у каждого потока на 99% одинаковый список и все они будут прогонять на повторы с 1 строки, и у многих скорее всего покажет что в игнор списке её нет, и сразу несколько начнут слать одинаковую строки и её же вместе добавлять в игнор. Вопрос, как этого избежать?
То что я список вставлю в глобальную переменную и потом верну назад, от этого вообще ничего не изменится.
Мне нужно чтобы либо каждый поток брал строки без повтора (для чего нужен нормальный глобальный список, которого в басе нет) либо как-то сделать чтобы txt файл с игнор списком обновлялся моментом и не было конфликтов. Для этого перезагрузить ресурс нужно использовать часто, а в басе написано что
и как тогда мне повторов избежать. То есть избежать именно на 100% чтобы их не было -
@Antonio как я к 1 глобальному приведу? в басе нет глобального списка, есть только глобальная переменная, то что я в неё список воткну, она от этого списком не станет и из неё по строчно каждым поток свою строку также не получится брать.
Плюс ты пишешь пока глоб переменная используется 1 поток, другие потоки её не трогают. Ок а че она там используется? 1 раз записывается список и возвращает назад? Это моментом происходит и так каждый поток сделает и в итоге выйдет просто лишнее бесполезное действие
-
@Zack9 said in Рассылка по единому списку в многопотоке без повторений:
в басе нет глобального списка, есть только глобальная переменная
Список - это и есть переменная.
то что я в неё список воткну, она от этого списком не станет
Станет
Короче говоря, читай на форуме, как работает многопоток и про прерывания. Я сто раз сказал, как сделать глобальный список, а ты повторяешь, что его не существует. В итоге зацикливаешь что-то там в onaplicationstart, что полнейший бред.
-
@Antonio said in Рассылка по единому списку в многопотоке без повторений:
Соответственно читаем, что нужно в список и сохраняем в глобальную переменную. Глобальную переменную читаем в локальную - работаем со списком из этой переменной - записываем в глобальную переменную эту локальную переменную со списком. Вот глобальный список.
да вот именно, ты сам понял что написал? я прочитал глоб переменную в список и она освободилась, тоже самое начнут делать и другие потоки. И везде всё будет одинаковое. Как это поможет каждому потоку свою строку использовать? Вообще никак
-
собственно покумекав вроде нашел решение, вариант с объединением решения Antonio и моим, короче он сказал про глобальный список, но не сказал, что его нужно получать в онапликейшенстарт и потом в локальном списке удалять строку перед перезаписью.
вот текст разраба по глоб переменным

Поэтому самый нормальный вариант как по мне получается:
в онапликейшен создаём функцию зацикленную, в ней парсим онлайн юзеров и список сохраняем в глобальную переменную.
Далее эту глоб переменную в обычных потоках конвертим в обычную переменную, из получившегося списка берем первый элемент с удалением и перезаписываем глоб переменную. тем самым другие потоки будут ждать эти действия, так как они синхроны, и когда задача дойдет до след потока, глоб переменная уже будет обновлена и повторно строку бас не заюзает, потому что она удалена.в это время, также постоянно работает зацикленный онапликейшен где чекается пустая глоб переменная или нет, если пустая, снова парсим юзеров онлайн и обновляем глоб переменную.
Тем самым, нет лишней нагрузки на парсинг списка каждым потоком одного и того же, а также работа скрипта не нагружается ресурсами. Ну и самое главное, одна и та же строка повторно не будет заюзана.
-
@Zack9 А я не пойму, зачем тебе весь этот геморой с потоками которые парсят один и тот же список? Не проще ли отправлять один поток на парсинг, а другие в это время в ожидание или завершать, а когда один поток закончит парсить, то сразу запускать все остальные и уже делать рассылку во многопотоке...
По-моему так гораздо проще и меньше ресурсов у железа жрет.