Python Socket 异步发送和接收设计

4 投票
1 回答
7129 浏览
提问于 2025-04-17 19:03

我正在写一个Python的socket客户端,主要功能是:

  1. 每5秒发送一次message one(比如说“你好”),每15秒发送一次message two(比如说“再见”)
  2. 随时接收消息

我想把发送和接收放在不同的线程里进行,但现在还是会阻塞。有没有人有什么建议?

线程 #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。这可能就是问题所在!

我在你的代码中没有看到其他问题。

撰写回答