Не успевает произойти синхронизация списка в многопотоке

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
Вобщем ситуация такова - есть файл с кучей эмейлов. Его должен юзать шаб зенно, когда нужна регистрация к примеру. Но также надо чтобы 1 шаб брал с общего списка только 1 эмейл. Т.е. когда шаб работае в многопотоке - то нужно чтобы 1-й поток брал мыло с общего файла, а все остальные юзали уже это мыло и к общему файлу не обращались.
Как это реализовано:
- есть уже готовый общий файл с мылами.
- файл для отдельного шаба создается самим шабом через сниппет с-шарп и вначале он пустой.
- также есть отдельный список именно для этого email
- и в списке и в таблице указано сохранять изменения в файл. Насколько я понял в таком случае список/таблица будет общим для всех потоков

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

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

Но на практике у меня выходит, что берется 2 мыла из общего файла. Т.е. берется мыло первым потоком, заносится в список, но второй поток этих изменений не видит и опять лезет в таблицу.
3-й уже видит изменения нормально и работает как надо

З.Ы. Сорри за долгое вступление, но думал что списки/таблицы быстрее реагируют на изменения, чем прямаю запись/чтения с файла. Но на деле облом вышел (ну или я чего-то не досмотрел хотя пробовал и так и этак).

Тестовый шаб с траблом - http://rghost.ru/57197876. Во входящих настройках можно везде указать путь к файлику с мылами, этого хватит
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Пока первый поток "пошел" в таблицу за почтой, второй поток "зашел" в список и увидел, что там ничего ничего нет и соответственно "пошел" в таблицу за почтой, а первый поток "пошел" обратно в список записывать почту.

Нужно блокировать список пока первый поток не запишет в него почту из таблицы.
Или выстраивать проверку на количество строк в списке после записи почты в список потоками и в соответствии с результатом корректировать список и таблицу.
 

rostonix

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

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83
еще можно запустить один поток и через минуту просто добавить еще потоков
ну по крайней мере я так решал эту проблему, но в итоге отказался от такой реализации, а просто скопировал 5 раз папку и запустил 5 шабов)
 

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
Пока первый поток "пошел" в таблицу за почтой, второй поток "зашел" в список и увидел, что там ничего ничего нет и соответственно "пошел" в таблицу за почтой, а первый поток "пошел" обратно в список записывать почту.
Не в этом дело, потому как я делал так вот
запустить один поток и через минуту просто добавить еще потоков ну по крайней мере я так решал эту проблему
Только у меня все-равно гребет 2-е мыло. Для меня этот вариант вполне приемлем, а вот список мыл не резиновый)

Паузу тоже думал сделать, но тогда первый поток тоже будет тормозить и сам интервал между проверками разных потоков не изменится
 

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
но в итоге отказался от такой реализации, а просто скопировал 5 раз папку и запустил 5 шабов)
А я как раз отказываюсь от реализации с 5-ю папками))
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Паузу можно рандомную сделать)
 

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