Python-等待来自大量套接字的输入

Python-等待来自大量套接字的输入,python,sockets,Python,Sockets,我正在用Python做一个简单的实验。我有一个主进程,负责所有其他进程,每个进程都有一个通过unix套接字连接到主进程的连接。我希望主进程能够监控所有套接字的响应,但理论上可能有近百个套接字。线程将如何影响应用程序的内存和性能?最好的解决方案是什么?非常感谢 100个并发线程可能会超出线程的合理限制。如果您发现这是组织代码的最干净的方法,我会说尝试一下,但是线程确实不能扩展得很远 更好的方法是使用一种技术,如等待其中一个套接字可读/写/或报告错误。这种机制允许您进入睡眠状态,直到发生有趣的事情,

我正在用Python做一个简单的实验。我有一个主进程,负责所有其他进程,每个进程都有一个通过unix套接字连接到主进程的连接。我希望主进程能够监控所有套接字的响应,但理论上可能有近百个套接字。线程将如何影响应用程序的内存和性能?最好的解决方案是什么?非常感谢

100个并发线程可能会超出线程的合理限制。如果您发现这是组织代码的最干净的方法,我会说尝试一下,但是线程确实不能扩展得很远

更好的方法是使用一种技术,如等待其中一个套接字可读/写/或报告错误。这种机制允许您进入睡眠状态,直到发生有趣的事情,处理许多套接字的内容,然后再次进入睡眠状态,所有这些都在一个执行线程中完成。删除多线程通常可以减少出错的机会,这种编程方式应该可以让您轻松地进入数百个连接。如果你想超过100个,我会使用轮询功能,而不是选择-不断地重建感兴趣的文件描述符列表需要轮询不需要的时间


应该考虑的是为了提供一种一致的方法,将回调挂接到这种编程的事件上,它们已经做了一些工作。如果您熟悉node.js,它有点像,但是Python。我必须承认我对Twisted有一点反感——我在他们的文档中从来没有走得太远而不感到完全困惑——但是。您可能会发现它比我更适合。

对线程和套接字处理进程进行比较测试的最简单方法是使用Python标准库中的。通过继承ThreadingMixIn或ForkingMixIn,您可以轻松地切换方法,同时保持所有其他内容不变。这是一个让你开始的方法

另一种选择是在单个进程和单个线程中使用非阻塞套接字

如果您对已经充分开发和高度演进的软件感兴趣,请考虑这些基于Python的高性能服务器包:

该框架使用异步单进程、单线程样式。 该框架类似,发展较少,功能较少,但更容易理解 这是一个高性能的分叉服务器。
谢谢,我会调查的。但是有什么理由我不想在数量较少的套接字上使用poll吗?不,poll也适用于数量较少的套接字。我认为select接口比poll接口容易一点,但它们足够接近。epoll无疑使在事件处理循环的任何给定迭代中使用套接字上的部分读取变得更容易。select和poll要求您记住您已经执行了部分读取,或者从未执行过部分读取。