Использование smtplib для python для очень медленного подключения к серверу, 10 секунд +, чтобы получить ответ
сервер: postfix
на стороне сервера, просто установите код не конфигурации
client: smtplib.py
на стороне клиента, используйте url или ip (эластичный ip), оба пробовали, слишком медленно
Клиент находится в облачной доступной зоне A, сервер находится в том же az, странно то, что из другого az даже мойподключение к серверу действительно быстрое
код клиента
conn = smtplib.SMTP(url, 25, timeout=60)
conn.quit()
Проверьте сеть
ping в порядке, тест mtr в порядке
Tcpdump получает пакеты
обнаруживает, что получение ответа занимает много времени, но сервер загружен слабо, я использую этот сервер только для тестового соединения
Стой, чтобы найти функцию
21:45:34.757347 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
21:45:34.757393 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
21:45:34.757441 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
21:45:34.757476 connect(3, {sa_family=AF_INET, sin_port=htons(25),
sin_addr=inet_addr(" ")}, 16) = -1 EINPROGRESS (Operation now in progress)
21:45:34.757530 poll([{fd=3, events=POLLOUT}], 1, 60000) = 1 ([{fd=3,
revents=POLLOUT}])
21:45:34.759025 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
21:45:34.759165 poll([{fd=3, events=POLLIN}], 1, 60000) = 1 ([{fd=3,
revents=POLLIN}])
21:45:48.775217 recvfrom(3, "220 ESMTP "..., 8192, 0, NULL, NULL) = 50
похоже на recvf от времени, но все еще не знаю, почему
Сделать cprofile для поиска функции
python -m cProfile -s кумулятивно
7522 function calls (7465 primitive calls) in 14.597 seconds
Упорядочено по: совокупному времени
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 14.597 14.597 smtp-test.py:1(<module>)
1 0.000 0.000 14.580 14.580 smtplib.py:240(__init__)
1 0.000 0.000 14.579 14.579 smtplib.py:294(connect)
2 0.000 0.000 14.579 7.290 smtplib.py:344(getreply)
2 0.000 0.000 14.579 7.290 socket.py:411(readline)
2 14.579 7.289 14.579 7.289 {method 'recv' of
'_socket.socket' objects}
снова, recv займет 14 с
Мне нужно, чтобы это время было менее 1 с, но реальный результат - более 10 с.Кто-нибудь может дать какой-нибудь совет?