Проблема - работа со списками в многопотоке.

GreenWay

Client
Регистрация
11.05.2012
Сообщения
432
Благодарностей
139
Баллы
43
Zenno 5.10.6.0
Работа шаблона проста и незамысловата - брать построчно домены из списка с удалением, после этого get запрос и анализ на CMS, в пределах шаблона цикл на 55 выполнений, при этом перед get запросом чистка кеша и кук.
В основном запускаю в 30-50 потоков.
Так вот, при варианте "взять случайную строку с удалением" - после 30-50 выполнений строки берутся, но не удаляются, при этом сам процесс как-бы замедляется.
Подумал что проблема в "случайных строках" - сменил на "первую с удалением" - ложился спать - вроде нормально все работало в 35 потоков, но утром та-же картина - Строки не удаляются.
Это баг?
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113
  • Спасибо
Реакции: GreenWay

GreenWay

Client
Регистрация
11.05.2012
Сообщения
432
Благодарностей
139
Баллы
43
К сожалению проблема осталась. Может кто сталкивался?
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
т.е. в начале работы цикла строки удаляются из списка а после истечении какогото времени строки прекращают удаляться из списка?

Подозреваю что параллельные потоки не дают удалить нужную строку и цикл проскакивая это место продолжает работу шаблона.
 
  • Спасибо
Реакции: GreenWay

GreenWay

Client
Регистрация
11.05.2012
Сообщения
432
Благодарностей
139
Баллы
43
Да, похоже именно на это. Что посоветуешь? Может загнать все ссылки в бд и тянуть с бд?
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Пробовать не экшеном работать а сниппетом для многопотока.
Может загнать все ссылки в бд и тянуть с бд?
Это вообще шикарное решение. Я на это дело подсел и теперь все с БД делаю. Нафик эти файловые топоры.
 
  • Спасибо
Реакции: GreenWay

GreenWay

Client
Регистрация
11.05.2012
Сообщения
432
Благодарностей
139
Баллы
43
Спасибо за помощь. Подскажи сниппет для многопотока, бд хорошо, но я с ноута, и запущенный сервер Open Server кушает лишнее.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Со снипеттом не подскажу в данный момент, сорри. Немогу найти у себя. На форуме должен быть. Я его и брал с форума.

и запущенный сервер Open Server кушает лишнее
Да не так много кушает.
 

GreenWay

Client
Регистрация
11.05.2012
Сообщения
432
Благодарностей
139
Баллы
43
Спасибо. Сделаю с бд.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Возми любой сниппет который получает строку из списка и заверни его в lock(SyncObject) для много потока.

lock(SyncObject){
// код который лочить
}

Мне тут коллеги советовали
 
  • Спасибо
Реакции: GreenWay

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Ну вот такой сниппет у себя нашел.

Код:
var list = project.Lists["ListName"]; // Имя списка.
int i = int.Parse(project.Variables["VarName"].Value); //Сколько строк берем за раз.
return string.Join("\r\n", list.Take(i));
 
  • Спасибо
Реакции: GreenWay

chazer24

Активный пользователь
Регистрация
26.03.2016
Сообщения
271
Благодарностей
49
Баллы
28

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113

GreenWay

Client
Регистрация
11.05.2012
Сообщения
432
Благодарностей
139
Баллы
43
Кто столкнется с проблемой работы с файлами - MySQL это реально выход. Всем советую.
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Получилось? :-)
 

GreenWay

Client
Регистрация
11.05.2012
Сообщения
432
Благодарностей
139
Баллы
43
Да, 50 потоков норм, бд это вещь. Сейчас все шаблоны под бд точу, даже если просто акки брать из списка.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Я тоже все шабы перевел на работу с БД как попробовал. :-)
 
  • Спасибо
Реакции: GreenWay

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
272
Баллы
63

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Трудно сказать. Установите сервер БД, создайте базу с таблицами и изучите как вносить записи в базу, как их обновлять, удалять.
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
186
Баллы
43
Чтобы не создавать еще одну похожую тему спрошу тут - подскажите, что упускаю в шаблоне?
Задача шаблона - берет строку URL из файла, через get-запрос получает содержимое и по регулярке вытягивает другие ссылки. Их приводит к полному виду и сохраняет в файл. В однопотоке работает нормально. В 10 потоков - время от времени в итоговом файле проскакивает несколько пустых строк. В 70-100 потоков - пустых строк уже в разы больше. Пауза в 2-3 секунды в конце цикла не спасает от пустых строк. Весь цикл (без паузы) выполняется за 1-2 секунды. Для многопотока убрал зацикливание выполнения шаблона.
 

leva001

Client
Регистрация
26.07.2015
Сообщения
282
Благодарностей
48
Баллы
28
И с чего тут можно начать, если ранее не сталкивался с этим?
Были те же проблемы с многопотоком, MySQL реально все решает. В освоении баз данных очень помог вот этот топик http://zennolab.com/discussion/threads/primer-proektirovanija-bazy-dannyx-mysql-dlja-raboty-s-shablonami-zennopostera.35715/
 

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