我正在编写一个守护进程,我必须在Java和Python之间做出选择 - 从技术上讲,我完全负责语言选择,但我将其缩小到这两个。我选择了Python 2.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 ++守护进程。任何人都有更好的想法吗?
第二个问题:
“Python 3比同等的Python 2.7快吗?”
提前感谢您的回答/建议/意见/其他任何内容。
答案 0 :(得分:3)
这取决于你将为每个客户做什么工作。许多服务器不会为每个客户端请求执行大量CPU密集型工作,在这种情况下,使用像Python Twisted这样的事件驱动模型会更好。在Python中尤其如此,因为线程并不是它的强项。
如果你有大量的CPU密集型工作要做,你应该使用一个线程池(不是每个请求的线程或每个客户端的线程,而是每个线程的线程)。然后,您可以使用C或C ++或其他任何方式实现CPU密集型部件,并避免在此期间保持GIL。这将让你用Python解锁多核的力量。
最后,不,Python 3不可能比2.7更快。