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

Tra*_*vis 3 python sockets

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

sar*_*old 5

一百个同步线程可能会推动线程的合理限制.如果您发现这是组织代码的最简洁方法,我会说尝试一下,但线程确实不能扩展到很远.

更好的方法是使用一种技术,例如select等待其中一个套接字可读/可写/或报告错误.这个机制让你进入睡眠状态,直到有趣的事情发生,处理尽可能多的套接字有内容要处理,然后再次回到睡眠状态,所有这些都在一个执行线程中.删除多线程通常可以减少出错的机会,而这种编程风格应该可以让你进入数百个连接没有问题.(如果你想要超过100,我会使用这个poll功能而不是select- 不断重建有趣的文件描述符列表需要花费时间,poll而不需要.)

需要考虑的是Python Twisted Framework.他们已经花了一些长度来提供一种一致的方法来将回调挂钩到事件上以进行这种精确的编程.(如果你熟悉的话node.js,它有点像那样,但是Python.)我必须承认对Twisted的轻微厌恶 - 我的文档中没有完全没有被完全困惑 - 但是很多人进一步做到了在文档中比我做的.您可能会发现它比我更合适.