我正在尝试在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命令,因此它应该有2条连续连接的消息,但是只有在前一个套接字断开后才会返回消息。为什么会这样,我怎么能解决这个问题?
答案 0 :(得分:2)
这是一个经典的错误。你打电话给handle()
(睡了4秒钟),然后尝试从结果中创建一个线程。目标应该是一个函数引用,args应该单独传递。
threading.Thread(target=handle, args=(s.accept(),)).start()
在此版本中,主线程等待accept
,然后创建运行handle
的线程。