Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python';s电子邮件仅在某些网络连接上发送缓慢-getfqdn需要30秒_Python_Networking_Dns - Fatal编程技术网

Python';s电子邮件仅在某些网络连接上发送缓慢-getfqdn需要30秒

Python';s电子邮件仅在某些网络连接上发送缓慢-getfqdn需要30秒,python,networking,dns,Python,Networking,Dns,我的开发机器(MacBook Air和MacOS 10.8.3)在发送电子邮件时遇到问题。它慢得令人痛苦。然而,速度的慢取决于我如何连接到互联网。如果我使用家庭WiFi连接,发送电子邮件需要约30秒。如果我以其他方式连接,比如在朋友家或通过我的iPad通过LTE,电子邮件发送速度很快(

我的开发机器(MacBook Air和MacOS 10.8.3)在发送电子邮件时遇到问题。它慢得令人痛苦。然而,速度的慢取决于我如何连接到互联网。如果我使用家庭WiFi连接,发送电子邮件需要约30秒。如果我以其他方式连接,比如在朋友家或通过我的iPad通过LTE,电子邮件发送速度很快(<1秒)

使用Django debug_工具栏,我已确定
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