提高python服务器的性能

提高python服务器的性能,python,c++,multithreading,sockets,python-2.7,Python,C++,Multithreading,Sockets,Python 2.7,我正在编写一个守护进程,我必须在Java和Python之间进行选择——从技术上讲,我完全负责语言选择,但我把它缩小到了这两种。我选择Python2.7是因为我对它有着很长的历史。我100%确信我不想使用任何其他语言。可能会考虑为Python 3重写它,但这是我愿意去的。服务器仍然处于设计阶段,所以对于Python 3重写它并不昂贵,但是C++、java或任何其他语言都是不可能的。现在,我知道如何编写并发服务器,但我的问题是: “有更好的解决办法吗?” 通常,主线程等待新的连接,如果有连接,它会生

我正在编写一个守护进程,我必须在Java和Python之间进行选择——从技术上讲,我完全负责语言选择,但我把它缩小到了这两种。我选择Python2.7是因为我对它有着很长的历史。我100%确信我不想使用任何其他语言。可能会考虑为Python 3重写它,但这是我愿意去的。服务器仍然处于设计阶段,所以对于Python 3重写它并不昂贵,但是C++、java或任何其他语言都是不可能的。现在,我知道如何编写并发服务器,但我的问题是:

“有更好的解决办法吗?”

通常,主线程等待新的连接,如果有连接,它会生成一个新线程来处理客户机并侦听新的连接

# pseudo-code
import threading, socket

class thread(threading.Thread):
    def __init__(self, socket):
        self.socket = socket
    def run(self):
        deal_with_client()

while True:
    s, fromaddr = sock.accept()
    t = thread(s)
    t.start()
我在考虑多处理而不是线程,但我不确定这是正确的方法。我的服务器有可能一次访问数千个客户端。硬件不是问题,我们考虑到Python守护进程需要比C++编写的守护进程更出色的事实。有人有更好的主意吗

第二个问题:

“Python3比同等的Python2.7快吗?”


提前感谢您的回答/建议/评论/其他任何内容。

这取决于您将为每位客户做什么工作。许多服务器不会为每个客户机请求执行大量CPU密集型工作,在这种情况下,最好使用类似Python Twisted的事件驱动模型。在Python中尤其如此,因为线程不是它的强项

如果有大量CPU密集型工作要做,那么应该使用线程池(不是每个请求的线程或每个客户机的线程,而是每个核心的线程)。然后你可以在C或C++中实现CPU密集型部件,或者在那个时候避免使用吉尔。这将使您能够利用Python解锁多核的威力


最后,不,Python 3不太可能比2.7快。

这取决于您将为每个客户机做什么工作。许多服务器不会为每个客户机请求执行大量CPU密集型工作,在这种情况下,最好使用类似Python Twisted的事件驱动模型。在Python中尤其如此,因为线程不是它的强项

如果有大量CPU密集型工作要做,那么应该使用线程池(不是每个请求的线程或每个客户机的线程,而是每个核心的线程)。然后你可以在C或C++中实现CPU密集型部件,或者在那个时候避免使用吉尔。这将使您能够利用Python解锁多核的威力


最后,不,Python 3不太可能比2.7快。

这取决于您将为每个客户机做什么工作。许多服务器不会为每个客户机请求执行大量CPU密集型工作,在这种情况下,最好使用类似Python Twisted的事件驱动模型。在Python中尤其如此,因为线程不是它的强项

如果有大量CPU密集型工作要做,那么应该使用线程池(不是每个请求的线程或每个客户机的线程,而是每个核心的线程)。然后你可以在C或C++中实现CPU密集型部件,或者在那个时候避免使用吉尔。这将使您能够利用Python解锁多核的威力


最后,不,Python 3不太可能比2.7快。

这取决于您将为每个客户机做什么工作。许多服务器不会为每个客户机请求执行大量CPU密集型工作,在这种情况下,最好使用类似Python Twisted的事件驱动模型。在Python中尤其如此,因为线程不是它的强项

如果有大量CPU密集型工作要做,那么应该使用线程池(不是每个请求的线程或每个客户机的线程,而是每个核心的线程)。然后你可以在C或C++中实现CPU密集型部件,或者在那个时候避免使用吉尔。这将使您能够利用Python解锁多核的威力


最后,不,Python 3不可能比2.7快。

并且用C++编写的客户端处理听起来是个好主意,我会让它沉入其中,让客户机用C++编写的交易听起来是个好主意,我会让它沉入其中,让客户机用C++编写的交易听起来是个好主意,我会让它沉入其中,让客户用C++编写的交易听起来是个好主意,我会让它沉入一段时间。