线程中的Python socket recv

时间:2019-03-10 07:43:19

标签: python

这是我的问题。我在lua上有一个通过套接字发送数据的服务器。数据不断传输-这是交换交易的流。我作为客户端的python脚本应该接收数据。

def listen():

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = socket.gethostname()
    sock.connect(("localhost", 1111))

    with BytesIO() as response_bytes:
            while True:    
                try:
                    fragment = sock.recv(8196)    
                    print("Фрагмент: {}".format(fragment))
                except Exception:
                    pass

if __name__ == "__main__":

    t2 = threading.Thread(listen())
    t2.start()

    while True:

        print ("test") 

主线程等待sock.recv(8196)行。我希望并行接收来自套接字的数据,并且主流继续工作。当前代码会阻塞main的性能,直到执行侦听为止。我不熟悉Python中的多个任务。可以做出什么决定?

1 个答案:

答案 0 :(得分:1)

您必须将listen函数传递给threading.Thread()。您正在主线程中调用该函数,等待它完成,然后传递其返回值(这是None,因为该函数从不返回任何内容)。

t2 = threading.Thread(target = listen)