首页 新闻 搜索 专区 学院

Python 循环遍历socket传输的消息时,循环被阻塞

0
悬赏园豆:20 [已解决问题] 解决于 2018-01-06 19:50
# 循环遍历每个client对应socket接收消息放入到消息队列中
def receiver():
print "receiver线程启动"
while True:
for keyTemp in clients.keys():
sock = clients[keyTemp]
try:
data = sock.recv(BufferSize)
except Exception:
pass

if data is None:
continue
elif data =="":
continue
else:
print clients.keys()
print "接收到新消息"+keyTemp+":"+data
Message = {}
Message[keyTemp] = data
MessageQueue.append(Message)
print MessageQueue
print MessageQueue[0]


这个代码是用python写了,感觉原理差不多吧!
问题:当我有两个用户在线["123","456"]时这个循环会遍历用户名所映射的socket
通过sock.recv(BufferSize)这个语句接收消息
当用户名为456的发送消息如:“你好!世界”我的服务器是不能接收到这个消息
只有当用户名为123的用户发送完消息后服务器才能才能接受到用户456发送的消息
即:循环会一直被阻塞,知道接收到消息才能执行。
这个问题应该怎么解决


海绵般汲取的主页 海绵般汲取 | 菜鸟二级 | 园豆:216
提问于:2018-01-05 12:15
< >
分享
最佳答案
0

用多线程应该可以解决,不懂python,之前用C#做过,太久了忘了,大概就是有阻塞的地方开个新线程就可以了。

收获园豆:20
~冰 | 小虾三级 |园豆:509 | 2018-01-05 12:49

试了下,发现在子线程开启新线程会报错,好像不可以这样做。 

海绵般汲取 | 园豆:216 (菜鸟二级) | 2018-01-05 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册