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

  • 每 5 秒发送一次 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/

    10-13 06:29