Python Socket 异步发送和接收设计
我正在写一个Python的socket客户端,主要功能是:
- 每5秒发送一次
message one
(比如说“你好”),每15秒发送一次message two
(比如说“再见”) - 随时接收消息
我想把发送和接收放在不同的线程里进行,但现在还是会阻塞。有没有人有什么建议?
线程 #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')
1 个回答
3
这段话的意思是,它并不是在阻塞。只是你的主线程在第一次执行 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
。这可能就是问题所在!
我在你的代码中没有看到其他问题。