Python';s电子邮件仅在某些网络连接上发送缓慢-getfqdn需要30秒
我的开发机器(MacBook Air和MacOS 10.8.3)在发送电子邮件时遇到问题。它慢得令人痛苦。然而,速度的慢取决于我如何连接到互联网。如果我使用家庭WiFi连接,发送电子邮件需要约30秒。如果我以其他方式连接,比如在朋友家或通过我的iPad通过LTE,电子邮件发送速度很快(<1秒) 使用Django debug_工具栏,我已确定Python';s电子邮件仅在某些网络连接上发送缓慢-getfqdn需要30秒,python,networking,dns,Python,Networking,Dns,我的开发机器(MacBook Air和MacOS 10.8.3)在发送电子邮件时遇到问题。它慢得令人痛苦。然而,速度的慢取决于我如何连接到互联网。如果我使用家庭WiFi连接,发送电子邮件需要约30秒。如果我以其他方式连接,比如在朋友家或通过我的iPad通过LTE,电子邮件发送速度很快(
getfqdn
函数是罪魁祸首。打开与SMTP服务器的连接时调用:
Call CumTime Per TotTime Per Count
... SNIP ...
31.673 31.673 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/message.py in send(249)
31.627 31.627 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/backends/smtp.py in send_messages(80)
31.623 31.623 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/backends/smtp.py in open(37)
30.821 30.821 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/utils.py in get_fqdn(14)
30.147 30.147 0.000 0.000 1
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py in getfqdn(124)
30.147 30.147 0.000 0.000 1
或者如果我使用IP地址,大约250毫秒:
> time echo 'quit' | telnet 50.97.69.146 587
Trying 50.97.69.146...
Connected to 50.97.69.146-static.reverse.softlayer.com.
Escape character is '^]'.
Connection closed by foreign host.
echo 'quit' 0.00s user 0.00s system 42% cpu 0.002 total
telnet 50.97.69.146 587 0.02s user 0.01s system 8% cpu 0.259 total
我知道部分问题(通过终端实验证明)是由于DNS查找速度慢(约5秒)造成的。在Django/Python中,其余的减速来自哪里 我转而使用谷歌的公共DNS服务器(
8.8.8.8
和8.8.4.4
),所有这些问题都消失了。不知为什么,DNS服务器是这个问题的核心
我仍然想知道为什么Python的调用需要30秒来解析域名,而在终端上解析DNS则需要5秒。一种可能是,如果您不在它知道的IP子网上,您使用的邮件服务器会造成延迟。我已经在我的邮件服务器上设置了这个作为反垃圾邮件的措施。这是可能的,我已经考虑过了,因为我在波兰。然而,我已经看到,除了我的电缆调制解调器之外,它与其他所有上行链路的速度一致。DNS服务器似乎是问题的核心(见下面我的答案)。wireshark可能会透露一些有趣的信息。Python和telnet命令是否解析不同的名称?很可能是这样,通过观察wireshark中的差异,您可能会很好地了解问题的原因。
> time echo 'quit' | telnet 50.97.69.146 587
Trying 50.97.69.146...
Connected to 50.97.69.146-static.reverse.softlayer.com.
Escape character is '^]'.
Connection closed by foreign host.
echo 'quit' 0.00s user 0.00s system 42% cpu 0.002 total
telnet 50.97.69.146 587 0.02s user 0.01s system 8% cpu 0.259 total