在python套接字服务器中接受多个客户端

在python套接字服务器中接受多个客户端,python,sockets,Python,Sockets,我正在尝试用python构建一个简单的套接字服务器: import socket import threading import time def handle(conn_addr): print("Someone Connected") time.sleep(4) print("And now I die") host = '' port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try:

我正在尝试用python构建一个简单的套接字服务器:

import socket
import threading
import time


def handle(conn_addr):
  print("Someone Connected")
  time.sleep(4)
  print("And now I die")


host = ''
port = 5000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
  s.bind((host,port))
except socket.error as e:
  print(str(e))

s.listen(2)

while True:
  threading.Thread(handle(s.accept())).start()


print("Should never be reached")
套接字服务器应同时接受多个客户端。我试图通过从shell的多个选项卡调用telnet localhost 5000来测试它的功能,但是我得到的模式是

Someone Connected
And now I die
Someone Connected
And now I die
而不是

Someone Connected
Someone Connected
Someone Connected

我在相隔4秒钟内调用telnet命令,因此它应该有两条连接在一起的消息,但是该消息仅在断开前一个套接字后返回。为什么会这样?我怎样才能去解决这个问题呢?

这是一个典型的错误。您调用了
handle()
(休眠了4秒钟),然后尝试根据其结果创建线程。目标应该是函数引用,并且应该单独传递参数

threading.Thread(target=handle, args=(s.accept(),)).start()

在此版本中,主线程等待
接受
,然后创建运行
句柄

的线程。您正在打印die语句,而不关闭套接字。客户端仍应连接,但为什么在我连接到该功能后,该功能不立即打印“已连接的人”?它总是等待“die”被打印?据我所知,它应该打印“connected”,然后暂停4秒钟,然后打印“die”(即使你没有关闭插座)。这不是正在发生的事情吗?你从哪里得到你的原始代码?很好的答案