我正在写一个 python 套接字客户端
- 每 5 秒发送一次
消息一
(例如你好),每 15 秒发送一次消息二
(例如 15 秒) - 随时接收消息
我的意思是在不同的线程中进行发送和接收。但是它仍然阻塞。 有人有什么建议吗?
线程#1
threading.Thread(target=Thread2, args=(sock)).start()
sock.recv(1024)
线程 #2
def Thread2(sock):
count = 0
while True:
sleep(5)
count = count + 5
sock.send('Hello')
if count % 15 == 0
sock.send('15 seconds')
最佳答案
它不是阻塞的。只是您的主线程在第一个 sock.recv(1024)
之后什么都不做。你必须告诉它不断收集数据:
主线程
threading.Thread(target=Thread2, args=(sock,)).start()
while True:
data = sock.recv(1024)
if not data:
break
print data
请注意,您无法轻易中断该过程。为此,您需要将线程设置为守护进程:
主线程
t = threading.Thread(target=Thread2, args=(sock,))
t.daemon = True
t.start()
while True:
data = sock.recv(1024)
if not data:
break
print data
此外,当您传递 args
时,请记住传递一个元组,即 args=(sock,)
而不是 args=(sock)
.对于 Python,args=(sock)
等同于 args=sock
。这可能是罪魁祸首!
我在您的代码中看不到更多问题。
关于Python Socket异步收发设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404517/