Python 如何管理来自服务器的两个以上线程之间的请求?
服务器端:Python 如何管理来自服务器的两个以上线程之间的请求?,python,multithreading,sockets,python-multithreading,serversocket,Python,Multithreading,Sockets,Python Multithreading,Serversocket,服务器端: def data(): data2="" with open('group9.json') as file: readed_Data=json.load(file) for data in readed_Data['data']: data_send+=data return data2 def connected(sock,id)
def data():
data2=""
with open('group9.json') as file:
readed_Data=json.load(file)
for data in readed_Data['data']:
data_send+=data
return data2
def connected(sock,id):
print("Thread starts",id)
name= sock_a.recv(1024).decode('utf-8')
API=requests.get("https://api.agify.io/?name="+name)
response=API.text
data=json.loads(response)
#To save the new info
with open("temporary_file.json","w") as file:
json.dump(data, file, indent=4)
while True:
#recieve number from client
number = sock_a.recv(1024).decode('utf-8')
data_send=""
if(number=="1"):
data_send=data()
else:
data_send="not=1"
sock.sendall(data_send.encode('utf-8'))
#TCP SOCKET
with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as sock_p:
sock_p.bind(("127.0.0.1", 49999))
#sock_p.settimeout(15)
sock_p.listen(3)
threads=[]
while True:
sock_a, sockname = sock_p.accept()
print("connected to ",sockname[0],sockname[1])
t = threading.Thread(target=connected, args=(sock_a,len(threads)+1))
threads.append(t)
print(threads)
t.start()
这是服务器端{THREAD}的代码。当客户端第二次在客户端的recv上获得块后,两个或多个客户端请求不同的名称时,我认为问题来自线程。有什么解决方案吗
客户端:
with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as sock_p:
sock_p.connect(("127.0.0.1", 49999))
while True:
print("enter the name")
name=input()
sock_p.sendall(name.encode('utf-8'))
print("enter the number")
number=input()
sock_p.sendall(number.encode('utf-8'))
data=sock_p.recv(1024)
print(data)
实际上不可能说出所提供代码的实际情况——没有线程,套接字的类型也不清楚。请查看帮助页面。从我收集的信息和一些假设来看,您的协议本质上是一对一的–只有一个连接(
sock
),它用于recv发送/发送recv对。一旦有多个客户端1和2,您就可以得到代码不处理的交错recv1-recv2-send1-send2“对”。我编辑它,请再次查看您的服务器从全局sock\u a
读取,而不是从客户端/线程/函数本地sock
读取。一旦另一个客户端连接,所有现有线程都将切换到其套接字。TLDR:仅使用sock
而不是sock\u a
内部的已连接的
。