Matplotlib + 套接字 = 卡死?

1 投票
1 回答
792 浏览
提问于 2025-04-16 05:53


我正在尝试绘制通过网络套接字接收到的数据。我使用“Matplotlib”这个库来绘图,并用“cPickle”来处理Python对象的序列化。
当我运行我的代码时,绘图窗口会打开但卡住了。我试过几种方法来解决这个问题,但都没有效果。
不知道这是否有帮助,但我在Windows 7(64位)上使用的是“Python 2.7 - 32位”。这里是我的代码

def init_plot():
    matplotlib.pyplot.ion()
    figsrc = matplotlib.pyplot.figure()
    axsrc = figsrc.add_subplot(111, autoscale_on=True)

def plot(x,y,z=None):
    if z == None:
        pylab.plot(x,y)
    else:
        pylab.plot(x,y,z)
    pylab.show();

def unserialize(data):
    return pickle.loads(data)

def init_socket():
    global UDPSock,buf
    # Set the socket parameters
    host = "localhost"
    port = 21567
    buf = 10240
    addr = (host,port)

    # Create socket and bind to address
    UDPSock = socket(AF_INET,SOCK_DGRAM)
    UDPSock.bind(addr)
if __name__ == '__main__':
    init_plot()
    init_socket()
    while 1:
        data,addr = UDPSock.recvfrom(buf)
        temp = numpy.array(unserialize(data))
        plot(temp[0,:],temp[1,:])
    UDPSock.close()

客户端的代码运行得很好。我不知道这是否是32位和64位不兼容的问题,还是代码本身的问题。

谢谢。

附:我尝试过“pyfunc”的建议,使用了s.setblocking(flag)socket.settimeout(value)...但还是没有帮助。

1 个回答

0

我觉得你只需要把 pylab.show() 改成 pylab.draw() 就可以了。

撰写回答