Рассылка по единому списку в многопотоке без повторений

Поддержка
  • @Antonio ещё раз, список парситься онлайн всеми потоками одинаковый (в моменте может обновляться), толку от такой глобальной переменной, если перебираться будет одно и тоже. Через нормальный глобальный список, можно было бы сделать, чтобы строка потоком бралась и удалялась из списка, тогда бы повторов между потоками не было. А класть список в глобальную переменную и потом вынимать, это толк нулевой и никак повтороного использования строки не поможет избежать

    Ресурсы нормально работают, если их перезагружать, если не использовать действие перезагрузить, то ничего не обновляется нормально. Но в описание к действию написано, что в многопотоке перезагрузку лучше не использовать. А без перезагрузки никуда

  • @Zack9 это нормальный глобальный список. Поищи на форуме, как многопоток работает. Пока один поток работает с глобальной переменной, другие потоки её не трогают. Попробуй, как я написал, если тебе именно список нужен глобальный, а потом говори, работает или нет.

  • @Antonio у меня задача рассылать без повторов.

    Вначале каждый поток парсит страницу на онлайн в список (у каждого потока свой список но на 99% что он будет одинаковый) , далее у меня есть txt файл с игнор списком, из тех, по кому уже сделали рассылку и который постоянно дописывается.

    Я беру строку из списка и прогоняю её по txt встречается она там или нет, если нет, то беру строку и делаю рассылку. Как сделал рассылку дописываю её в txt.

    Но проблема в том, что у каждого потока на 99% одинаковый список и все они будут прогонять на повторы с 1 строки, и у многих скорее всего покажет что в игнор списке её нет, и сразу несколько начнут слать одинаковую строки и её же вместе добавлять в игнор. Вопрос, как этого избежать?

    То что я список вставлю в глобальную переменную и потом верну назад, от этого вообще ничего не изменится.
    Мне нужно чтобы либо каждый поток брал строки без повтора (для чего нужен нормальный глобальный список, которого в басе нет) либо как-то сделать чтобы txt файл с игнор списком обновлялся моментом и не было конфликтов. Для этого перезагрузить ресурс нужно использовать часто, а в басе написано что 7654920c-1431-4dd6-8016-9d499c3e8b73-image.png
    и как тогда мне повторов избежать. То есть избежать именно на 100% чтобы их не было

  • @Zack9 ну так дело не в списке глобальном, а в том, что логика скрипта кривая. Куча потоков парсит себе кучу списков, а работать надо с одним списком. Ну так приведи все списки к одному глобальному и дальше работай с ним.

  • @Antonio как я к 1 глобальному приведу? в басе нет глобального списка, есть только глобальная переменная, то что я в неё список воткну, она от этого списком не станет и из неё по строчно каждым поток свою строку также не получится брать.

    Плюс ты пишешь пока глоб переменная используется 1 поток, другие потоки её не трогают. Ок а че она там используется? 1 раз записывается список и возвращает назад? Это моментом происходит и так каждый поток сделает и в итоге выйдет просто лишнее бесполезное действие

  • ладно, походу нашел решение с зацикливание онапликейшенстарт, это единственный вариант

  • @Zack9 said in Рассылка по единому списку в многопотоке без повторений:

    в басе нет глобального списка, есть только глобальная переменная

    Список - это и есть переменная.

    то что я в неё список воткну, она от этого списком не станет

    Станет

    Короче говоря, читай на форуме, как работает многопоток и про прерывания. Я сто раз сказал, как сделать глобальный список, а ты повторяешь, что его не существует. В итоге зацикливаешь что-то там в onaplicationstart, что полнейший бред.

  • @Antonio в басе есть отдельные экшены для списков, они не работают с глобальными переменными. Толку о того, что список станет глобальным, если я не смогу сделать, чтобы каждый поток использовал свою строку из этой переменной?

  • @Zack9 Я тебе сразу написал последовательность действий. Больше читай, меньше пиши.

  • @Antonio то что ты написал имеет смысл если списки разные, мне какой смысл это юзать если список одинаковый у всех потоков?

  • @Zack9 удачи.

  • @Antonio said in Рассылка по единому списку в многопотоке без повторений:

    Соответственно читаем, что нужно в список и сохраняем в глобальную переменную. Глобальную переменную читаем в локальную - работаем со списком из этой переменной - записываем в глобальную переменную эту локальную переменную со списком. Вот глобальный список.

    да вот именно, ты сам понял что написал? я прочитал глоб переменную в список и она освободилась, тоже самое начнут делать и другие потоки. И везде всё будет одинаковое. Как это поможет каждому потоку свою строку использовать? Вообще никак

  • собственно покумекав вроде нашел решение, вариант с объединением решения Antonio и моим, короче он сказал про глобальный список, но не сказал, что его нужно получать в онапликейшенстарт и потом в локальном списке удалять строку перед перезаписью.

    вот текст разраба по глоб переменным
    78656eed-2fd2-4573-8bcd-e83aec6b54d5-image.png

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

    в это время, также постоянно работает зацикленный онапликейшен где чекается пустая глоб переменная или нет, если пустая, снова парсим юзеров онлайн и обновляем глоб переменную.

    Тем самым, нет лишней нагрузки на парсинг списка каждым потоком одного и того же, а также работа скрипта не нагружается ресурсами. Ну и самое главное, одна и та же строка повторно не будет заюзана.

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

  • @Zack9 а зачем тут выдумывать глобальные списки? Есть же нормальный инструмент - ресурсы. Записывайте результат парсинга в ресурс.

  • @prakash я так и сделал

  • @smeckoi77 ресурсы для нормальной работы обновляющегося постоянно списка, нужно постоянно перезагружать, а это нагружает процессор и жесткий диск. в самом басе написано что перезагружать ресурс для многопотока лучше не юзать