我正在编写一个 python 套接字客户端
message one
(例如 Hello),每 15 秒发送一次 message two
(例如 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/