Создание ssl-сокетов Python smtplib занимает много времени

#python #sockets #smtp #smtplib

#python #сокеты #smtp #smtplib

Вопрос:

У меня есть очень простая программа для отправки почты, которая использует pythons smtplib для отправки почты через защищенный сокет. По какой-то причине создание сокета занимает около 80 секунд. Это код, который я использую:

 with smtplib.SMTP_SSL(config['SMTP_HOST'], config['SMTP_PORT']) as server:
    # Send mail here
 

После создания сокета все работает гладко и быстро. Временное «исправление» проблемы заключается в том, чтобы передать небольшой тайм-аут, например:

 with smtplib.SMTP_SSL(config['SMTP_HOST'],config['SMTP_PORT'], timeout=0.5) as server:
    # Send mail here
 

Теперь создание сокета занимает 0,5 секунды.

Кто-нибудь знает, почему это может произойти? Я использую python 3.9. Я тестировал его на python 3.7, но у меня были те же проблемы. Тот же самый скрипт мгновенно запускается на других компьютерах, так что, возможно, он не связан с python? Я запускаю macOS Big Sur 11.0.1.

Комментарии:

1. Вы говорите, что для подключения требуется 80 секунд или что через 80 секунд истекает время ожидания? Ваш второй пример предполагает, что вы не получаете соединения, вы получаете тайм-ауты. Если вы получаете тайм-аут, то в вашем вопросе почти нет информации, чтобы выяснить, почему.

2. Выполнение первого примера занимает 80 секунд. Я не думаю, что получаю тайм-ауты, потому что после этих 80 секунд он отправляет почту, и ошибки тайм-аута нет. Так что, вероятно, для подключения требуется эти 80 секунд. Почему установка небольшого тайм-аута помогает в этом случае: понятия не имею.

Ответ №1:

В чем бы ни заключалась проблема, она была исправлена с помощью последнего обновления Mac OS.