Многопоточный чекер аккаунтов

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28
Друзья,

Вопрос такой. Сделал себе чекер аккаунтов на валидность.

Принцип работы такой:

1. Берём данные из файла в таблицу и проверяем их
2. Далее сортируем их в разные файлы (отдельно валидные, отдельно нет)

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

Проблема следующая.

В начале цикла я беру первую строку таблицы, удаляю её и проверяю на валидность.

Если строк в файле нет, то валидные аккаунты копируются на место исходного файла и программа завершается.

И вот тут возникает косяк.

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

Можно ли как-то сделать так, чтобы копирование файла происходило после того, как все потоки отработали?

P.S. как тут файлы прикладывать не пойму?
 

Lexicon

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

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28
Привяжите их к спискам, таблицам и все будет ок
Так они и так в таблицах. Там 3 таблицы. 1 - исходная, 2 - норм акки, 3 - нелеквид.

Когда 1 таблица опустошается, то нужно чтобы файл сгенерированный 2-й таблицей был скопирован вместо 1-й. Это нужно чтобы можно было проверять валидные акки со временем повторно.

Но проблема в том, что поток №1 опустошает таблицу №1 и копирует файл, а поток №2 работает с данными в это время и потом цикл опять повторяется и он уже видит опять целый файл акков и погнал по новой проверять.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Аааа вот теперь я понял - попробуйте добавлять фаил обратно с паузой, скажем секунд 40. Или как вариант можно сохранять данные в фаил с каким нибудь специфичным именем и настроить в расписании этот фаил как маркер, и отдельным проектом его подменять
 

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28
Аааа вот теперь я понял - попробуйте добавлять фаил обратно с паузой, скажем секунд 40. Или как вариант можно сохранять данные в фаил с каким нибудь специфичным именем и настроить в расписании этот фаил как маркер, и отдельным проектом его подменять
Про задержку думал, но её не просчитать. Сервер может долго отвечать.

Вообще в Зенке неплохо сделать в настройках таска что-то типа "Выполнить после отработки проекта".
 

rostonix

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

Вообще в Зенке неплохо сделать в настройках таска что-то типа "Выполнить после отработки проекта".
Это есть: Good End
 

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28

Dailes

Client
Регистрация
27.05.2013
Сообщения
193
Благодарностей
76
Баллы
28
Может через глобальный счетчик получить количество строк в файле (акков) и понижать и понижать их, а когда будет 0 - тормозить проекты и копировать в файл.
 
  • Спасибо
Реакции: codeby

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28
Может через глобальный счетчик получить количество строк в файле (акков) и понижать и понижать их, а когда будет 0 - тормозить проекты и копировать в файл.
надо попробовать, но на счёт Good end я понял, что он выполняется в пределах конкретного потока, а не всего таска, а я вообще предложил бы сделать опцию, выполнения действий после завершения таска. То же копирование временного файла, после всех работ над ним.
 

rostonix

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

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28
сделайте отдельный шаблон для этого и запускайте его в диспетчере задач после основного.
Сделал. Но через диспетчер многопоточность не работает. Ставлю делать 10 раз в 10 потоков, но в итоге запускается только 1 поток. В настройках постера стоит 50 потоков максимум и 10 на таск. По итогу работает только 1 поток на таск. Если пускать не через диспетчер, то работает в 10 потоков отлично.
Это баг или что-то делаю не так?
 

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28
Причём заметил следующее

Если в Диспетчер добавляю просто таск чекера аккаунтов и ставлю 10 потоков и 10 повторений, то всё хорошо. Но если в задание добавляю второй проект по копированию файла, то только 1 поток работает независимо от настроек. Вот такая засада.
 

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28

 

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