The Python channel.recv() method will block when there is no data to read and wait for the data to exit the loop failure solution

question:

while True: 
    result0 = channel.recv(1024*1024).decode('utf-8') 
    if not result0: # If result0 is an empty string 
        break # Exit the loop 
    # Process result0 is not empty 
    print(result0) exit the loop fail

  

If this code cannot exit the loop, it may be because the method will block waiting for data when there is no data to read, so it needs to close or set a timeout channel.recv()before exiting the loop .channel

One possible solution is to set channel.settimeout()the method, for example:

channel.settimeout(5)  # 设置超时时间为 5 秒

while True:
    try:
        result0 = channel.recv(1024*1024).decode('utf-8')
    except socket.timeout:
        break  # 超时退出循环
    if not result0:
        break
    # 处理 result0 非空的情况
    print(result0)

Here, channel.settimeout()the timeout period is set to 5 seconds through the method, and then use to try-exceptcatch the timeout exception, and exit the loop if an exception is caught.

Guess you like

Origin blog.csdn.net/songpeiying/article/details/132675559