Try using "Template" action and construct your text with hyerlinks than paste it to page.
Other option is to create simple LOCAL html page somewhere on your hard disk with
desired text and links, than open that local html page in another tab in BAS and than copy
from that tab to the tab where you are working.
Рассылка по единому списку в многопотоке без повторений
-
Подскажите не пойму, к примеру в многопотоке я паршу 1 список, далее у меня есть игнор список в txt я в нём проверяю на наличие игнор и если нет рассылаю. Всё норм работает в одном потоке, но в многопотоке, одинаковые потоки могут брать одни и те же строки, тогда игнор список не сработает.
Был вариант, брать строку и сразу записывать в ресурс игнор список перезагружать ресурс, опять прочекивать всё и сравнивать если ли в игноре и совпадает ли уже со взятой переменной. Но в описание написано, что действие перезагружать ресурс сильно нагружает процессор и жесткий диск и многопотоке его не нужно использовать.
Второй вариант был, это паузы перед запуском потока делать, чтобы одновременная работа с одинаковой спаршенной строкой, была маловероятна. Но это только вероятность снижает, но не спасает от повторов.Потом хотел парсить список, записывать его в ресурс и брать из ресурса с notreuse, но тогда парсить и записывать в список будут все потоки и тоже ерунда получится.
Подскажите как тогда решить это, чтобы спаршенный онлайн список одинаковый в многопотоке можно было без повторов между потоками прослать?
-
всё таки ну единственное нормальное решение вижу это перезагрузка ресурса, его кто использует в многопотоке? почему в описание к нему написано что лучше не использовать в многопотоке, а что тогда использовать, если междупотоками данные только в ресурсах да глоб переменных передаются. Эту проблему решил бы глобальный список, но его нет.
-
@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 А я не пойму, зачем тебе весь этот геморой с потоками которые парсят один и тот же список? Не проще ли отправлять один поток на парсинг, а другие в это время в ожидание или завершать, а когда один поток закончит парсить, то сразу запускать все остальные и уже делать рассылку во многопотоке...
По-моему так гораздо проще и меньше ресурсов у железа жрет.