更新到原始帖子:一位同事指出我做错了什么.我会在帖子的底部给出解释,因为它可能对其他人有帮助.
我试图基本了解python程序的网络性能限制,并遇到异常现象.代码片段
while 1:
sock.sendto("a",target)
Run Code Online (Sandbox Code Playgroud)
将UDP数据包发送到目标计算机,速度与主机发送的速度一样快.我测量的发送速率仅为每秒4000个数据包,或每个数据包250个.这似乎很慢,即使对于像python这样的解释语言(该程序运行在2 GHz AMD opteron,Linux,python版本2.6.6).我在python for TCP中看到了更好的性能,所以我觉得这有点奇怪.
如果我在后台运行并运行top,我发现python只使用了25%的cpu,这表明python可能会人为地延迟UDP数据包的传输.
还有其他人经历过类似的事吗?有谁知道python是否确实限制了数据包传输速率,是否有办法将其关闭?
顺便说一句,类似的C++程序每秒可以发送超过200,000个数据包,因此它不是平台或操作系统的固有限制.
所以,事实证明我犯了一个愚蠢的新手错误.我忽略了明确地调用gethostbyname.因此,sendto命令中的目标地址包含符号名称.每次发送数据包时都会触发名称解析.解决此问题后,我测量的最大发送速率约为120,000 p/s.好多了.