Форум сайта python.su
Добрый день.
thr_lst = [] sem = threading.Semaphore(num) with sem: for ind, mail_to in enumerate(mail_list): if ind != 0 and ind % COUNT == 0: send_for_my_email() thr = threading.Thread( target=run_send, args=(mail_to,), daemon=True ) thr_lst.append(thr) thr.start() [i_thr.join() for i_thr in thr_lst]
Офлайн
зачем так мудрить в одну кучу все
я бы сделал так
поток на пинг smtp сервера
поток на отправку
функция сортировки smtp - пплохие хорошие
функция отправки писем по валидному листу
разложи все пополочкам а то тут мухи и котлеты в одном корыте
—
потоку разбей на модули
для писем
для ip адресов
и запускай все с главного скрипта
—
а список ты можешь записать в sqlite и оттуда уже не обновлять а запрашивать обработаный лист из базы по 1й строчке
Отредактировано Genabox (Янв. 28, 2023 13:54:27)
Офлайн
Genaboxсортировка smtp live/dead есть, она отдельно запускается. бывает просто, что серверы дохнут в процессе рассылки. вот и удаляются такие. но они уже используются в потоках. и нужно в потоки впихнуть список только валидных серверов. вот такая проблема.
зачем так мудрить в одну кучу всея бы сделал такпоток на пинг smtp серверапоток на отправкуфункция сортировки smtp - пплохие хорошиефункция отправки писем по валидному листуразложи все пополочкам а то тут мухи и котлеты в одном корыте—потоку разбей на модулидля писемдля ip адресови запускай все с главного скрипта—а список ты можешь записать в sqlite и оттуда уже не обновлять а запрашивать обработаный лист из базы по 1й строчке
Офлайн
а как ты определяешь что сервек сдох
при отправке письма или ты его предварительно пингуешь?
Офлайн
отправляю письмо и ловлю ошибку - значит сдох. пинг может пройти, а, например, там стоит лимит в 500 сендов, вот он и отказывается работать.
Отредактировано robisho (Янв. 28, 2023 15:48:21)
Офлайн
отлично%)
я так и думал.
ты пытаешь выебать сервак своими потоками, он у тебя не дохнет а он тебя банит!!
у тебя тут 2 ошибки
1 информация статична или переодична но никак не динамична а ты пытаешься сделать ее динамичной
2 отправка писем штука тонкая и действительно тебя проста банит сервер от пачки писем
Исходя из этого
1 пиши серваки листом в базу и запрашивай по одному серваку на 1но письмо и чередуй их
2 поставь таймер на поток для обработки отправщика письма и при появлении ошибки отправки >> помечай сервак в базе , ставь его на таймаут для недоступности например сутки и перебирай остальные сервера которые свободны для отправки
На таймер поставь по возможности маленькой количество отправок писам например у тебя задача отправить 100 писем - удели этому 10 минут, если 1000 тогда час если больше смотри сам по нагрузкам
и не пихай информацию в поток она там не нужна, тебе в потоке тебе нужен таймер который не будет вхуяривать по серваку пачкой писем а окуратно отправлять по 1му письму
Офлайн
Genaboxспасибо за подсказки. дело в том, что многопоточность должна быть обязательно, так хочет юзверь. буду пробовать прикрутить к этому sqlite, вроде бы не очень большая нагрузка будет, только записать при старте все серверы, потом отчекать и выдавать по-одному. ну и обновлять динамически.
отлично%)я так и думал.ты пытаешь выебать сервак своими потоками, он у тебя не дохнет а он тебя банит!!у тебя тут 2 ошибки1 информация статична или переодична но никак не динамична а ты пытаешься сделать ее динамичной2 отправка писем штука тонкая и действительно тебя проста банит сервер от пачки писемИсходя из этого1 пиши серваки листом в базу и запрашивай по одному серваку на 1но письмо и чередуй их2 поставь таймер на поток для обработки отправщика письма и при появлении ошибки отправки >> помечай сервак в базе , ставь его на таймаут для недоступности например сутки и перебирай остальные сервера которые свободны для отправкиНа таймер поставь по возможности маленькой количество отправок писам например у тебя задача отправить 100 писем - удели этому 10 минут, если 1000 тогда час если больше смотри сам по нагрузками не пихай информацию в поток она там не нужна, тебе в потоке тебе нужен таймер который не будет вхуяривать по серваку пачкой писем а окуратно отправлять по 1му письму
Офлайн
многопоточность должна быть обязательно100%
юзверь?
записать при старте все серверы1 раз пишешь базу и все
спасибо за подсказкиyou welcome
Офлайн