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

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