2024-06-02 21:17:10 发布
网友
我现在正在写一个单播聊天服务器模型,流程如下:
我使用python标准库asyncore实现了聊天服务器模型。我发现一旦客户机连接到服务器,CPU就会上升(1%对24%)。我认为性能受到handle_write函数循环的限制。在
有没有更好的(例如,更有效的)框架来满足我的聊天服务器需求?在
提前谢谢
我刚刚从一个web上读到,讨论了不同pythonweb服务器之间的效率(Link)。在
我想我会使用gevent,因为它看起来非常有效。在
当然,我们需要实际的代码来调试这个问题。但你主要问的是:
Is there a better (e.g. more efficient) framework to accomplish my chat implementation?
是的。人们普遍认为asyncore很糟糕。它既难用又效率低。它在Windows上尤其糟糕,因为select在Windows上尤其糟糕。在
asyncore
select
所以,是的,使用不同的框架可能会让事情变得更好。在
不幸的是,SO问题不是获得框架建议的好地方,但是我可以抛出一个常见的怀疑列表:twisted,monocle,gevent,eventlet,tulip。在
或者,如果您不担心可扩展到几十个客户机,只关心小规模的性能,那么每个客户机使用一个线程(甚至两个线程,一个用于读,一个用于写)和阻塞I/O非常简单。在
最后,如果您一直在使用python3.x,那么3.4很有可能会有一个新的改进的异步I/O模块,它比asyncore更高效、更易于使用(而且它几乎肯定是基于tulip)的。所以…最好的解决办法可能是买台时光机,再往前走几个月。(或者,如果您是一个将来搜索此答案的读者,请查看IPC下的标准库,猜测哪个模块是新的改进的异步I/O模块。)
tulip
我刚刚从一个web上读到,讨论了不同pythonweb服务器之间的效率(Link)。在
我想我会使用gevent,因为它看起来非常有效。在
当然,我们需要实际的代码来调试这个问题。但你主要问的是:
是的。人们普遍认为
asyncore
很糟糕。它既难用又效率低。它在Windows上尤其糟糕,因为select
在Windows上尤其糟糕。在所以,是的,使用不同的框架可能会让事情变得更好。在
不幸的是,SO问题不是获得框架建议的好地方,但是我可以抛出一个常见的怀疑列表:twisted,monocle,gevent,eventlet,tulip。在
或者,如果您不担心可扩展到几十个客户机,只关心小规模的性能,那么每个客户机使用一个线程(甚至两个线程,一个用于读,一个用于写)和阻塞I/O非常简单。在
最后,如果您一直在使用python3.x,那么3.4很有可能会有一个新的改进的异步I/O模块,它比
asyncore
更高效、更易于使用(而且它几乎肯定是基于tulip
)的。所以…最好的解决办法可能是买台时光机,再往前走几个月。(或者,如果您是一个将来搜索此答案的读者,请查看IPC下的标准库,猜测哪个模块是新的改进的异步I/O模块。)相关问题 更多 >
编程相关推荐