Потоки какие то не такие...

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Вообщем, странно, но я держу пока что кувалду на изоленте под сталом :D
Вообщем проблема с потоками,
Описание:
1.Переход на страницу,
2.Паршу ссылки
3.Заношу ссылки в лист
4.Финиш
5.Заношу спаршенные ссылки в файл.

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

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

Но я же не буду за ними как за детьми присматривать и запускать их в двери по очереди,

Почему они сами не знают кто за кем и вообще шо за дела такие вот хм, я расстроен очень. :-)

Ну кто вообщем в курсе событий как справится с учениками пишите, либо дайте мне каких то примерный учеников на своем примере а я скачаю и потестю их на воспитание и интелект.
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Вообщем что я сделал перед тем как идти спать помыл ноги, но тут пришла в голову мысль, просто щас в нее ничего не приходит так как спал часа 2 от силы за посленюю неделю.
Так вот, я вставил сообщение счетчика, что бы при потоках вылетал алерт с нумерацией, так вот велатет в таком поряде 0 0 1 1 2 2 3 3 и как это понять ?
Вообщем жду судей гонщиков и котов.
 

bedl0

Client
Регистрация
07.12.2012
Сообщения
244
Благодарностей
56
Баллы
28
По описанию трудно что-то с ванговать, покажите шаблон.
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Вообщем я понял из за чего это но не понял почему так и как этого избежать ? :-)
Вообщем это все их за метода GET - парсинга сурса. Если его бурать то циклы идут как надо, если он есть, то к примеру два цикла будут парсить поочереди начиная с начала, т.е

0,0,1,1 вообщем увидите в зенке по алертам резальт.

Вылаживаю пример.
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Ага вылажил пример, люди как тут файл то прикрепить ?...
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Вот вообщем нашел быстренько какойто файло дроп без регистрации.
Качаем: http://dropcanvas.com/92jn5/1
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 708
Баллы
113
1.Переход на страницу,
2.Паршу ссылки
3.Заношу ссылки в лист
4.Финиш
5.Заношу спаршенные ссылки в файл.
Нужно просто добавить список, указать в его свойствах путь к файлу, поставить галки "загружать из файла" и "сохранять изменения".
И добавлять в список строки, использовать экшены сохранения в файл не нужно
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Нужно просто добавить список, указать в его свойствах путь к файлу, поставить галки "загружать из файла" и "сохранять изменения".
И добавлять в список строки, использовать экшены сохранения в файл не нужно
Я все так и делал, и делал по разному :-) но понял что проблема то не в этом, а в том что я написал выше.
Скачайте проэкт и запустите 2 потока и увидете что отображает счетчик.
Если в нормальных потоках идет 0,1,2,3 и т д , то в этом простейшом примере, с get запросом, идет все в порядке, 0,0, 1,1 т.е т.е два потока работают как один получается, т.е второй поток изначально не увеличен на +1.
Вообещем скачайте запустите увидите..
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 708
Баллы
113
Так так и должно быть. у вас не глобальные переменные
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Так так и должно быть. у вас не глобальные переменные
Так не чесно.
В том плане что я не знаю что там делать с глобальными переменными кот тоже не знает.
Как решить ? что там прописывать ?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 708
Баллы
113

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Спасибо, переделал, счетчик показывает вроде без повторений, но, сделал я привязку к файлу, как и говорилось, все равно повторяются данные раз или два а может и три раза в файле..
Т.е как бы на счетчике такого не видно типа 0 0 1 1 , а вот в самом файле, 2-3 раза по дному и тому же урлу парсилось.. т.е какие то 2-3 цикла парсили одну и туже старницу получается.. как то так
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Ага, или вот что еще, вроде с 2-3 раза решил проблему, если 2 цикла, то... к примеру в конце постинга есть алерт на выход FINISH.
Так вот в конце когда достигнут лимит парсинга, идем на выход, и обьявляем алерт.
Так мне вылетают в конце два FINISH. т.е последний поток записывает данные, ииии... тут на тебе второй потом тоже их записывает в итоге если делать в два потока то и будет двойная запись в конце....
Как этого избежать ?
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Извините конечно... но у вас какая то ошибка в логике шаблона, это я могу вам совершенно точно сказать. Если я даю список на 10 000 строк в 50 потоков, то на выходе я тоже получаю 10 000 строк, а исходя из ваших описаний должно быть хотя бы 10001.
Сложно искать в черной комнате черного котика, когда его там нет.
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Извините конечно... но у вас какая то ошибка в логике шаблона, это я могу вам совершенно точно сказать. Если я даю список на 10 000 строк в 50 потоков, то на выходе я тоже получаю 10 000 строк, а исходя из ваших описаний должно быть хотя бы 10001.
Сложно искать в черной комнате черного котика, когда его там нет.
кОТ, на глянь, бо я уже не могу я на одном месте уже часа 2 топчусь не могу понять что там не так..
Вообщем гляньте логику..

Сам файл : http://dropcanvas.com/lfa19/1
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 708
Баллы
113
"{-GlobalVariable.Poster.taskPos-}" == "{-Variable.page_limit-}"
тут кавычек не должно быть
в остальном вроде норм
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Ну вообщем странно как то, все получает проблема в стыковке завершение... это лично что я понял остоточно без сомнений проверив пицот раз и коту показал два раза на что он одобрил.
Так вот.
Если я ставлю 3 потока, лимит определен, и вылетает три алерта FINISH WORK.
Т.е получается 3 лишних раза записывает в файл последние 3 страницы..
Если ставлю 4 потока, то 4 раза будет выход на финиш идти.
Вот не пойму как этого избежать я уже глобальную переменную сделал Pagelimit но все тоже самое.
Т.е если из 3 потоков один заходит на финиш, то остальные 2 должны как то отсановится или ну не знаю... (вот тут вообще то и вся проблема) а они продолжают и тоже заходят на финиш в итоге 3
Пишет 1,2,3 финиш.. ну надеюсь понятно что я тут написал - но не могу понять как избежать такой проблемы, ну кроме того что по звершению всего, открывать удалять дубли и сохранять..
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Вообщем ясно, парсить ссылки можно только в один поток.
Просто я уже все перепробывал все методы сохранение данных и так далее, един метод работает это в один поток при чем по разным логическим методам, и методам сохранение.
Именно ссылки, с постингом проблем нет так как там эти переменные не учавствуют а идет привязка по файлу.. но тут.. это анреал какойто.
Можно обойтись даже одним потоком на костылях за то идем, но я из принципа хочу добить этот многопоточный парсинг линков, именно многопоточно !
Но видать тут никаму нет дела, понимаю у всех свои проблемы проэкты но привидете хотя бы мааааленький пример такого парсинга, с многопотоком. рабочий.
Что бы можно было понять где у меня в логике ошибка, хотя ошибку вверху гонщик не признал вроде. Ну тогда где проблема то ?
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Вообщем, не решил я не чего но не здался.. применять удалять дубли все равно пришлось, так как я понял проблема в распределении потоков и не связки логики их распределение.. вообщем заманил я их в клетку и удалил близнецов :D Просто иначе ну не знаю для меня бы было что то сверх естесвенное если бы мне щас показали рабочий пример... без применение дублей с разной вариацией потоков и что бы задал парсить 5 страниц, задал к ним 3 потока, и вышло тебе 50 урлов. Аа.. не тут то было.. :-) либо поток хитрец лезет не всвое стойло, либо хитрицы одновременно начинают с одного стойла, либо сумарное количество близнецов в конце думают что они последние :D как никрути выход один - применять дубли :aq: ха ха
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Посмотрел я ваш проект - косяк в том, что вы считаете что между проверкой значения и изменением того значения проходит 1 такт))) но это не так)))
Для того, чтобы все было ок нужно использовать 1 элемент, где семафоры реализованы по умолчанию - это списки. Отвязывайтесь от глобальных переменных и привязывайтесь к единому списку задания и все будет ок
 
  • Спасибо
Реакции: nomarketing

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Посмотрел я ваш проект - косяк в том, что вы считаете что между проверкой значения и изменением того значения проходит 1 такт))) но это не так)))
Для того, чтобы все было ок нужно использовать 1 элемент, где семафоры реализованы по умолчанию - это списки. Отвязывайтесь от глобальных переменных и привязывайтесь к единому списку задания и все будет ок
А можно примерчик, а то что то не могу обработать нормально информацию вами отправленную.. что бы разложить ее в програмном правильном логическом виде. :-)
А с маленьким примерчиком будет наглядно и понятно, а может кому то еще и полезно :-)

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

Мааааааленький такой примерчиккк :-)

Спасибо :-)
 

nole

Client
Регистрация
19.11.2010
Сообщения
368
Благодарностей
215
Баллы
43
я бы сделал так - сохраняйте в файл список значений переменной, которая изменяется при парсинге, и из него уже можно многопоточно брать, и проблем не будет
не совсем правильно, если в переменной простой счетчик, но хотя бы работает
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
вот пример
 

Вложения

  • 18,6 КБ Просмотры: 9
  • Спасибо
Реакции: nomarketing

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Спасибо, что то для меня новенькое, тем более я думал что все можно решить без стороннего кода, а как оказалось он там присуцтвует хоть и не большой, и пока мне не понятные кроме алерта который показывает изменение.
С такой логикой не сталкивался еще .. буду рабиратся как это она так работает и что за код.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Да этот код просто прибавляет 30 к первоначальному числу)))))) я не знаю яваскрипта, поэтому выкручиваюсь как могу)))
Но в любом случае его наличие и суть никак не влияют на логику работы с одним источником данных в несколько потоков
 
  • Спасибо
Реакции: nomarketing

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Да этот код просто прибавляет 30 к первоначальному числу)))))) я не знаю яваскрипта, поэтому выкручиваюсь как могу)))
Но в любом случае его наличие и суть никак не влияют на логику работы с одним источником данных в несколько потоков
Так а почему число берется из списка 123.txt ? а не из счетчика ?..
Т.е в моем понимании парсинг работал по такой логике -
Устанавливаем счетчик
подставляем счетчик в гет запрос,
проверяем лимит,
Увеличиваем счетчик
Если достигнут лимит
Выход..
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
А я логику вашего парсера вообще не понимал)))
какая перменная, какой лимит?))) что парсим то?))
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Ну к примеру мне надо спарсить с 20 страниц линки на новости.
Значение счетчика подставляется в гет запрос, после чего полчаем сурс, из сурса, регуляркой все линки ложим в список, и переходим на 2 страницу.
Т.е счетчик это указатель страниц, если счетчик 2 то и страница будет 2 с которой будем парсить.
А у вас логика просто но мне не понятна.. т.е не понятно как ее можно применить при парсинге.. и зачем там тот тестовый файл ? с цифрами.. (т.е к моей логике парсинга это не применимо) ибо я не пойму как оно работает и как это можно применить
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
К примеру зачем там список ?
В моем парсинге список изначально пусть, а только потом заполняется спаршенными данными, у вас список применяется .. изначально что уже не подходит по логике как бы..
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
907
Благодарностей
178
Баллы
43
Ощем ясно ходить по кругу в в качестве зеннопостера по форуму утомился :-)
 

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