首页 > 解决方案 > 线程中的Python套接字recv

问题描述

这是我的问题。我在 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 的性能,直到执行 listen。我不熟悉 Python 中的多个任务。可以做出哪些决定?

标签: python

解决方案


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

t2 = threading.Thread(target = listen)

推荐阅读