Python Socket异步发送和接收设计

时间:2013-03-14 08:39:20

标签: python sockets

我正在编写一个python套接字客户端

  1. 每5秒发送message one(例如Hello),每15秒发送message two(例如15秒)
  2. 随时接收消息
  3. 我的意思是在不同的线程中进行发送和接收。然而,它仍然是阻止。 有没有人有建议?

    线程#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 个答案:

答案 0 :(得分:3)

它没有阻止。只是你的主线程在sock.recv(1024)之后没有做任何事情。你必须告诉它不断收集数据:

MAIN THREAD

threading.Thread(target=Thread2, args=(sock,)).start()
while True:
    data = sock.recv(1024)
    if not data:
        break
    print data

请注意,您将无法轻松中断该过程。为此,您需要将线程设置为守护程序:

MAIN THREAD

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。这可能是罪魁祸首!

我在代码中看不到更多问题。