我正在编写一个守护进程,我必须在 Java 和 Python 之间做出选择 - 从技术上讲,我完全负责语言选择,但我将范围缩小到这两种。我选择 Python 2.7 是因为我对它有很长的历史。我 100% 确定我不想使用任何其他语言。可能会考虑为 Python 3 重写它,但这是我愿意做的。服务器仍处于设计阶段,因此为 Python 3 重写它并不昂贵,但 C++、Java 或任何其他语言都是不可能的。现在,我知道如何编写并发服务器,但我的问题是:
"Is there a better solution?"
一般来说,主线程会等待新连接,如果有连接,它会生成一个新线程来处理客户端并监听新连接。
# 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++ 守护进程需要更多。谁有更好的主意?
第二个问题:
"Is Python 3 faster than equivalent Python 2.7?"
预先感谢您的回答/建议/意见/其他。
最佳答案
这取决于您将为每个客户完成的工作。许多服务器不会为每个客户端请求做大量的 CPU 密集型工作,在这种情况下最好使用像 Python Twisted 这样的事件驱动模型。在 Python 中尤其如此,因为线程不是它的强项。
如果您有很多 CPU 密集型工作要做,您应该使用线程池(不是每个请求线程或每个客户端线程,而是每个核心线程)。然后你可以用 C 或 C++ 或其他语言实现 CPU 密集型部分,并避免在此期间持有 GIL。这将使您能够使用 Python 释放多核的力量。
最后,不,Python 3 不太可能比 2.7 快。
关于python - 提升 python 服务器的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25988223/