C/Python 套接字性能?

10 投票
2 回答
5044 浏览
提问于 2025-04-15 17:03

我的问题简单来说就是C语言和Python中使用socket的性能差别。因为我的Python是用CPython构建的,我觉得它们应该差不多,但我很好奇有没有人能提供一些“真实”的性能测试数据,或者至少是有根据的看法。

我的逻辑是这样的:

  • 如果C语言的socket快很多,那就写一个C语言的扩展。
  • 如果差别不大或者几乎没有差别,那就继续用Python写,想办法实现数据包级别的控制(比如用scapy或者dpkt)。

我相信会有人对这个问题感兴趣,不论是出于背景了解还是好奇。我打算为自己做一个代理(不是用来上网、匿名等),并将我想用的应用程序绑定到一个特定的端口。然后,所有在这个端口上的数据包都会被排队,修改地址头,然后再发送,等等。

提前谢谢大家。

2 个回答

1

我觉得C语言会更快,但Python用起来会简单很多。

它们之间的速度差别其实很小,除非你要处理非常大量的数据(比如每秒传输一百万GB这种夸张的情况,哈哈)。

13

一般来说,Python中的套接字(socket)表现得很好。比如,BitTorrent追踪器服务器的参考实现就是用Python写的。

在进行网络操作时,网络的速度通常是最主要的限制因素。也就是说,C语言和Python的套接字代码之间可能存在的微小速度差异,根本无法与实际进行的网络操作相比。

不过,你提到的想做的事情是检查和修改单个IP数据包。这超出了Python标准网络库的能力范围,而且这类操作通常还很依赖操作系统。因此,你需要先问自己“这可能吗?”而不是直接问“哪个更快?”

撰写回答