Как правильно обрабатывать многопоточность?

  • Автор темы Автор темы system2
  • Дата начала Дата начала

system2

Client
Регистрация
21.04.2010
Сообщения
57
Реакции
15
Баллы
8
Может в сабже и не правильно выразился, но у меня такой вопрос, кто как обрабатывает следующее:

допустим есть ресурс для проспама и профили пользователей, к примеру site.ru/profile/NNN/ вместо NNN есс-нно порядковый номер.
Я чтобы корректно работала спамилка делаю общий файл с порядковым номером, и 50-60 потоков делают следующим образом
читают счётчик из файла - увеличивают - записывают в файл
пробовал глобальные счётчики но они почему-то в рамках одного процесса, скажем на 5 потоков(ну как выставишь) а потом сбрасываются почему-то.

может просто я не умею готовить глобальные переменные???

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

кто как обрабатывает такие данные, поделитесь плиз мыслями?
 
просто сохрани весь список ссылок на все профиля в тхт и бери их с удалением с многопотоком ни каких проблем не будет
 
  • Спасибо
Реакции: Roman*
просто сохрани весь список ссылок на все профиля в тхт и бери их с удалением с многопотоком ни каких проблем не будет

ты имеешь в виду закидываем txt в список и берём строку с удалением, предварительно в списке "выставляем сохранять изменения в файл"?

я приблизительно так и делаю... просто думал может как-то по другому можно, что-то типа глобального списка в оператике, только не в памяти процесса, а в памяти самой зенки, чтобы с разных процессов был доступ, чтобы не нагружать винты, а то за нововвдениями не слежу может уже и придумали что-то подобное...
 
Да винты и так не грузятся, всё работа в раме происходит, изменения списка время от времени отражаются в файле.
 
Насчёт глобальных счётчиков - сейчас там баг на баге, не пригодно для работы. По части твоего вопроса - можно выносить работу в mysql базу или sqlite, в таком случае тебе нужен кодер либо собственная соответствующая квалификация.
 
  • Спасибо
Реакции: bigcajones
Прикладывайте пример как вы делаете.
 
ну например то что их не нужно объявлять или еще как то там
с ними сложно короче)
но у меня как то раз получилось сделать шаб с 10 глобальными и он норм работал
ну почти норм)
 
Прикладывайте пример как вы делаете.

глобальные счётчики но они почему-то в рамках одного процесса, скажем на 5 потоков(ну как выставишь) а потом сбрасываются почему-то.

т.е. они работают в рамках одного процесса...
 

Вложения

  • test.xmlz
    test.xmlz
    16,7 KB · Просмотры: 323
сорри rostonix я был не прав, работает...
 
Вы объявляете глобальную переменную при каждом выполнении. Логично что работает не так как ожидается.
http://i.gyazo.com/ebbc4c0f62e2dd33a28ee7d326308e6c.png
Это автоматом происходит, я же заполнял только "значение по умолчанию", сделать так чтобы было заполнено только "значение по умолчанию" мне не удалось, всегда он это подставляет в "значение", и даже визуально смотрится будто там ничего нет, но если открыть шаб снова - то как на скрине этом и получится.
 
Переменную нужно удалить из списка глобальных.
Смотрите мой пример.
 

Вложения

  • test.xmlz
    test.xmlz
    15,1 KB · Просмотры: 32
Какой билд?
Поставил паузу между добавлением данных в 1 сек.
запускал в 1-10 потоков несколько раз. Ни одной ошибки в файле.
 
Какой билд?
Поставил паузу между добавлением данных в 1 сек.
запускал в 1-10 потоков несколько раз. Ни одной ошибки в файле.
Билд 5.1.2.0, а без пауз как работает, с ошибками?
 
Билд 5.1.2.0, а без пауз как работает, с ошибками?
Без пауз тоже без ошибок. Просто там сразу через несколько секунд под несколько тысяч строк пишется, сложнее мониторить)
И очень маловероятно что кто-то увеличивает глобальные переменные на тысячи в течении секунды)
 
та же проблемма - значение глобальных удаляется после окончания проекта - тоесть вовсе не глобальная а простая переменная выходит, пример Ростоникса работает а мои нет, при запуске удаляются данные переменной - как быть - глобальные не работают ...
 
может кому поможет - с нудной игрой удаления добавления глобальных, таинственным образом заработало )
 
Если глобальная переменная сбрасывается, значит она объявляется в начале проекта, значит есть в списке переменных, чего быть не должно.
 
  • Спасибо
Реакции: kfil
Сложилась такая же проблема с многопотоком, парсит 111,222,333, итд подскажите как решить проблему то ?У ТСа все таки получилось чего то с решением?как быть?
 
Недостаточно информации в прошлом сообщении
 
Заходит на страницу, парсит 20 ссылок и кладет в тхт.В один поток все замечательно, но ставлю в 20 и парсит первую страницу несколько потоков одновременно и кладут в тхт итд.
И вопрос второй,идентичный.
Берет ссылку их тхт, постит..В 1 поток все хорошо, но в многопотоке будет браться также всеми потоками одна ссылка и постить будет сразу не 1 пост, все 20?
Подскажите как сделать логику,чтобы каждым потоком бралось только один раз,как и парсилось.Или парсить многопотоком не получится, так как всего одно окно инстанса работает только?
 
Заходит на страницу, парсит 20 ссылок и кладет в тхт.В один поток все замечательно, но ставлю в 20 и парсит первую страницу несколько потоков одновременно и кладут в тхт итд.
Тут где то у вас ошибка значит. Как берутсяя данные? Ведь как-то одна и та же страница у вас попадает в разные инстансы
 
Да попадает, делал как для однопотока.Значение счетчика=1 ставлю в ссылку и паршу первую страницу,кладу в тхт, значение счетчика =2 ставлю в ссылку и паршу вторую, кладу в тхт.А получается что каждый инстанс заходит все делает также.Как выйти из этой ситуации и как правильно переделать логику в данном случае?
 

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