Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字异步发送和接收设计_Python_Sockets - Fatal编程技术网

Python套接字异步发送和接收设计

Python套接字异步发送和接收设计,python,sockets,Python,Sockets,我正在编写一个python套接字客户机 每5秒发送一次信息(如Hello),每15秒发送一次信息(如15秒) 随时接收信息 我的意思是在不同的线程中进行发送和接收。然而,它仍在阻塞。 有人有什么建议吗 螺纹#1 螺纹#2 它不是阻塞。只是主线程在第一次sock.recv(1024)之后什么也不做。您必须告诉it部门不断收集数据: 主线程 threading.Thread(target=Thread2, args=(sock,)).start() while True: data = so

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

  • 每5秒发送一次
    信息(如Hello),每15秒发送一次
    信息(如15秒)
  • 随时接收信息
  • 我的意思是在不同的线程中进行发送和接收。然而,它仍在阻塞。 有人有什么建议吗

    螺纹#1

    螺纹#2


    它不是阻塞。只是主线程在第一次
    sock.recv(1024)
    之后什么也不做。您必须告诉it部门不断收集数据:

    主线程

    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
    
    请注意,您将无法轻松中断该过程。为此,您需要将线程设置为守护进程:

    主线程

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


    我看不到您的代码中有更多问题。

    如果您想要答案,请发布您编写的代码的相关部分。否则你会冒险把问题解决谢谢你的advice@Winston没有足够的代码。如何创建这些线程?我添加了套接字代码谢谢你的回答。我只知道python提供了一个名为asyncore/asynchat的模块。我可以用它来实现非阻塞I/O吗?@Winston为这个迟来的响应感到抱歉(不知为什么我错过了这个问题)。是的,您可以将其用于非阻塞I/O(我在工作中使用了asyncore)。