Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2023 03:50:44

robisho
Зарегистрирован: 2020-10-19
Сообщения: 60
Репутация: +  2  -
Профиль   Отправить e-mail  

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

Добрый день.

 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_file и образуется список smtp_list. из этого списка в функцию run_send() подаются сервера по одному. функция send_for_my_email() делает рассылку на выбранный емейл со всех элементов списка smtp при возникновении условия. если попадается нерабочий smtp - из исходного файла smtp_file он удаляется. можно ли сделать так, чтобы после завершения работы send_for_my_email() и перезаписи smtp_file обновить используемый smtp_list, чтобы следующие итерации цикла в потоках использовали только рабочие серверы из обновленного smtp_list? Спасибо.

Офлайн

#2 Янв. 28, 2023 13:32:17

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

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

зачем так мудрить в одну кучу все
я бы сделал так
поток на пинг smtp сервера
поток на отправку
функция сортировки smtp - пплохие хорошие
функция отправки писем по валидному листу
разложи все пополочкам а то тут мухи и котлеты в одном корыте

потоку разбей на модули
для писем
для ip адресов
и запускай все с главного скрипта

а список ты можешь записать в sqlite и оттуда уже не обновлять а запрашивать обработаный лист из базы по 1й строчке

Отредактировано Genabox (Янв. 28, 2023 13:54:27)

Офлайн

#3 Янв. 28, 2023 15:01:43

robisho
Зарегистрирован: 2020-10-19
Сообщения: 60
Репутация: +  2  -
Профиль   Отправить e-mail  

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

Genabox
зачем так мудрить в одну кучу всея бы сделал такпоток на пинг smtp серверапоток на отправкуфункция сортировки smtp - пплохие хорошиефункция отправки писем по валидному листуразложи все пополочкам а то тут мухи и котлеты в одном корыте—потоку разбей на модулидля писемдля ip адресови запускай все с главного скрипта—а список ты можешь записать в sqlite и оттуда уже не обновлять а запрашивать обработаный лист из базы по 1й строчке
сортировка smtp live/dead есть, она отдельно запускается. бывает просто, что серверы дохнут в процессе рассылки. вот и удаляются такие. но они уже используются в потоках. и нужно в потоки впихнуть список только валидных серверов. вот такая проблема.

Офлайн

#4 Янв. 28, 2023 15:37:53

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

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

а как ты определяешь что сервек сдох
при отправке письма или ты его предварительно пингуешь?

Офлайн

#5 Янв. 28, 2023 15:46:38

robisho
Зарегистрирован: 2020-10-19
Сообщения: 60
Репутация: +  2  -
Профиль   Отправить e-mail  

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

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

Отредактировано robisho (Янв. 28, 2023 15:48:21)

Офлайн

#6 Янв. 28, 2023 16:00:26

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

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

отлично%)
я так и думал.
ты пытаешь выебать сервак своими потоками, он у тебя не дохнет а он тебя банит!!
у тебя тут 2 ошибки
1 информация статична или переодична но никак не динамична а ты пытаешься сделать ее динамичной
2 отправка писем штука тонкая и действительно тебя проста банит сервер от пачки писем

Исходя из этого

1 пиши серваки листом в базу и запрашивай по одному серваку на 1но письмо и чередуй их
2 поставь таймер на поток для обработки отправщика письма и при появлении ошибки отправки >> помечай сервак в базе , ставь его на таймаут для недоступности например сутки и перебирай остальные сервера которые свободны для отправки

На таймер поставь по возможности маленькой количество отправок писам например у тебя задача отправить 100 писем - удели этому 10 минут, если 1000 тогда час если больше смотри сам по нагрузкам

и не пихай информацию в поток она там не нужна, тебе в потоке тебе нужен таймер который не будет вхуяривать по серваку пачкой писем а окуратно отправлять по 1му письму

Офлайн

#7 Янв. 28, 2023 16:48:00

robisho
Зарегистрирован: 2020-10-19
Сообщения: 60
Репутация: +  2  -
Профиль   Отправить e-mail  

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

Genabox
отлично%)я так и думал.ты пытаешь выебать сервак своими потоками, он у тебя не дохнет а он тебя банит!!у тебя тут 2 ошибки1 информация статична или переодична но никак не динамична а ты пытаешься сделать ее динамичной2 отправка писем штука тонкая и действительно тебя проста банит сервер от пачки писемИсходя из этого1 пиши серваки листом в базу и запрашивай по одному серваку на 1но письмо и чередуй их2 поставь таймер на поток для обработки отправщика письма и при появлении ошибки отправки >> помечай сервак в базе , ставь его на таймаут для недоступности например сутки и перебирай остальные сервера которые свободны для отправкиНа таймер поставь по возможности маленькой количество отправок писам например у тебя задача отправить 100 писем - удели этому 10 минут, если 1000 тогда час если больше смотри сам по нагрузками не пихай информацию в поток она там не нужна, тебе в потоке тебе нужен таймер который не будет вхуяривать по серваку пачкой писем а окуратно отправлять по 1му письму
спасибо за подсказки. дело в том, что многопоточность должна быть обязательно, так хочет юзверь. буду пробовать прикрутить к этому sqlite, вроде бы не очень большая нагрузка будет, только записать при старте все серверы, потом отчекать и выдавать по-одному. ну и обновлять динамически.

Офлайн

#8 Янв. 28, 2023 16:59:52

Genabox
Зарегистрирован: 2022-12-24
Сообщения: 198
Репутация: +  1  -
Профиль   Отправить e-mail  

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

многопоточность должна быть обязательно
100%
юзверь
?
запускай потоки с основного скрипта по функциям из модулей и все будет корректно работать
у меня например 1 поток на 1 функцию или на маин из 1 модуля
и титульный скрипт смотрится красиво

записать при старте все серверы
1 раз пишешь базу и все
по необходимости апдэйтишь

я лично mysql используб через wampserver
спасибо за подсказки
you welcome

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version