Python Socket异步收发设计

标签 python sockets

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

  1. 每 5 秒发送一次消息一(例如你好),每 15 秒发送一次消息二(例如 15 秒)
  2. 随时接收消息

我的意思是在不同的线程中进行发送和接收。但是它仍然阻塞。 有人有什么建议吗?

线程#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/

相关文章:

python - 无法在 python 2.7 中迭代元组

python - Postgres 调整 max_connections

c - 使用 recv 接收传入的 char 数组

c++ - C++ std::thread的行为

linux - 有没有办法获取unix套接字连接另一端的uid

c - (如何)我可以从套接字文件描述符确定套接字族吗

python - MatPlotLib 的 ion() 和 draw() 不工作

python - 为爬虫转换 url

mySQL 5.7.13 源安装不创建 mysqld.sock

python - 将 Pandas 数据框转换为字典,其中一列作为键,另一列作为多个值